ExcelスプレッドシートからHTTP POSTを実行するには、どのVBAコードが必要ですか?
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
を使用できます。
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のWebサービスを使用 」についての完全な概要を参照できます。
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エディターを開きます(通常はマクロを編集して)
- 利用可能な参照のリストに移動します
- Microsoft XMLを確認する
- OKをクリックします。
(from VBAプロジェクト内のMSXMLの参照 )
ServerXMLHTTP MSDNドキュメント には、ServerXMLHTTPのすべてのプロパティとメソッドに関する詳細が記載されています。
要するに、基本的には次のように機能します。
- open メソッドを呼び出してリモートサーバーに接続します
- 送信 を呼び出してリクエストを送信します。
- responseXML 、 responseText 、 responseStream または responseBody を介して応答を読み取ります
MSXMLライブラリを使用してからXMLHttpRequestオブジェクトを使用する前にこれを行いました。 http://scriptorium.serve-it.nl/view.php?sid=4 を参照してください