ต้องใช้รหัส VBA อะไรในการทำ HTTP POST จากสเปรดชีต Excel
ต้องใช้รหัส VBA อะไรในการทำ HTTP POST จากสเปรดชีต Excel
คำตอบ:
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send("")
อีกทางเลือกหนึ่งสำหรับการควบคุมมากขึ้นกว่าการร้องขอ HTTP คุณสามารถใช้ในสถานที่ของWinHttp.WinHttpRequest.5.1
MSXML2.ServerXMLHTTP
objHTTP.responseText
ซึ่งคุณสามารถพูดถึงสามารถเรียกดูโดย
ByRef
หรือไม่ก็ตาม นั่นเป็นเหตุผลว่าทำไมการใช้มันกับตัวแปรออบเจ็กต์ประเภทที่ไม่มีสมาชิกเริ่มต้นทำให้เกิดข้อผิดพลาดขณะทำงาน และใช้พวกเขาบนวัตถุที่จะมีสมาชิกเริ่มต้นผ่านค่าที่สมาชิกเริ่มต้นแทนของวัตถุที่เกิดขึ้นจริง
หากคุณต้องการให้ใช้งานได้ทั้งบน Mac และ Windows คุณสามารถใช้ QueryTables:
With ActiveSheet.QueryTables.Add(Connection:="URL;http://carbon.brighterplanet.com/flights.txt", Destination:=Range("A2"))
.PostText = "origin_airport=MSN&destination_airport=ORD"
.RefreshStyle = xlOverwriteCells
.SaveData = True
.Refresh
End With
หมายเหตุ:
สำหรับรายละเอียดเพิ่มเติมคุณสามารถดูสรุปทั้งหมดของฉันเกี่ยวกับ "การใช้บริการเว็บจาก Excel "
นอกเหนือจาก anwser ของBill the Lizard :
แบ็กเอนด์ส่วนใหญ่จะแยกวิเคราะห์ข้อมูลโพสต์ดิบ ตัวอย่างเช่นใน PHP คุณจะมีอาร์เรย์$_POST
ซึ่งตัวแปรแต่ละตัวในข้อมูลโพสต์จะถูกเก็บไว้ ในกรณีนี้คุณต้องใช้ส่วนหัวเพิ่มเติม"Content-type: application/x-www-form-urlencoded"
:
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("var1=value1&var2=value2&var3=value3")
"$HTTP_RAW_POST_DATA"
มิฉะนั้นคุณจะต้องอ่านข้อมูลที่โพสต์ดิบในตัวแปร
คุณสามารถใช้ServerXMLHTTP
ในโครงการ VBA ได้โดยเพิ่มการอ้างอิงถึงMSXML
.
- เปิด VBA Editor (โดยปกติจะแก้ไขมาโคร)
- ไปที่รายการข้อมูลอ้างอิงที่มีอยู่
- ตรวจสอบ Microsoft XML
- คลิกตกลง
(จากการอ้างอิง MSXML ภายในโครงการ VBA )
เอกสาร ServerXMLHTTP MSDNมีรายละเอียดเกี่ยวกับคุณสมบัติและวิธีการของการ ServerXMLHTTP
ในระยะสั้นมันทำงานโดยทั่วไปดังนี้:
- เรียกวิธีการเปิดเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล
- โทรส่งเพื่อส่งคำขอ
- อ่านการตอบสนองผ่านresponseXML , responseText , responseStreamหรือresponseBody
ในการตอบสนองของผู้ใช้รายอื่นให้เสร็จสมบูรณ์:
สำหรับสิ่งนี้ฉันได้สร้างวัตถุ"WinHttp.WinHttpRequest.5.1"
ส่งคำขอโพสต์พร้อมข้อมูลบางส่วนจาก Excel โดยใช้ VBA:
Dim LoginRequest As Object
Set LoginRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
LoginRequest.Open "POST", "http://...", False
LoginRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
LoginRequest.send ("key1=value1&key2=value2")
ส่งคำขอรับด้วยการรับรองความถูกต้องโทเค็นจาก Excel โดยใช้ VBA:
Dim TCRequestItem As Object
Set TCRequestItem = CreateObject("WinHttp.WinHttpRequest.5.1")
TCRequestItem.Open "GET", "http://...", False
TCRequestItem.setRequestHeader "Content-Type", "application/xml"
TCRequestItem.setRequestHeader "Accept", "application/xml"
TCRequestItem.setRequestHeader "Authorization", "Bearer " & token
TCRequestItem.send
TCRequestItem Object
คุณสามารถอ่านได้เช่น: TCRequestItem.ResponseText
หลังทำTCRequestItem.send