WinHTTPの使用法の備忘録
WinHTTPのPOSTデータ送信について、中でもファイルのアップロードを含むmultipart(マルチパート)でのPOSTデータ送信での注意事項。
VBA(VBでも同様の事態が考えられるかも・・・)で使用する際の注意。
POSTデータとして与えるデータはString型の変数に入れてはいけない!!
POSTするデータの内容にも依るのだが、String型に入れて受け渡すと、データが送信されずContent-Lengthがなんと「0」になってしまう。
リテラルで入れればOKなのだが、そんな事になったらスクレイピングなんぞままならない。
これでは何の役にも立たない訳で~
解決方法は…
StrConv("POSTDATA",vbFromUnicode)
ではダメで~
Variant型の変数に入れる!
StrConv("POSTDATA",vbFromUnicode)
では、文字が化けまくりでマトモなデータ送信になりません。
どうしてかは知りませんが、何故かダメなんです!!
ホント、たったこんな事だけで解決出来るのだけど、偶然気付いただけで、気付かないとどうにもならない。
Function FuncWinHTTPRequest(ReqAddress As String, strMethod As String, strPostData As String) As String
Dim vtPostData As Variant
Dim webReq As Object
Set webReq = CreateObject("winHTTP.WinHttpRequest.5.1")
webReq.Open strMethod, ReqAddress, False 'Falseは同期通信
webReq.SetRequestHeader "Content-Type", ""multipart/form-data; boundary=--BOUNDARY"
vtPostData = strPostData 'Variant型に代入
webReq.Send vtPostData 'String型からWinHTTPを呼び出し不可!!
'HTMLの文字コードがUTF-8なら変換不要。
'通常はstrConv(webReq.ResponseBody,vbFromUnicode,xxxx)はこんな感じ xxxxは、文字コードの番号
FuncWinHTTPRequest = webReq.ResponseBody
End Function
こんな感じで解決!!
XP Sp3
Excel2007VBA にて