ここで尋ねられる質問:VBAを使用してExcelからサーバーにHTTP POSTリクエストを送信するにはどうすればよいですか?サーバーに多数のファイルを送信しようとしていることを除けば、これはほぼ正確に私が探していたものです。さらにグーグルで検索したところ、VBAを使用してHTTPポスト経由でzipファイルをアップロードするにはどうすればよいですか?これも良かったのですが、かなり落胆しました。これは大変な作業のようです(ここでHTMLフォームを作成するだけではありません...)。
ここでのオプション#2:http ://www.motobit.com/tips/detpg_post-binary-data-url/ (上記のSOに関する質問で引用)はうまくいくようですが、私はJSとCSS、例でFormData(サーバーに送信するバイナリファイル)を作成する方法がわかりません。
誰か助けてくれませんか?基本的に、Excel内からVBAを介してHTTP_POST経由で3〜6個のファイルを、などのフォームデータを期待するWebサーバー上のPHPスクリプトに送信したいと思います。これを処理するHTMLフォームは次のようになります。
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input type="submit" />
</form>
よろしくお願いします。
編集-2012年8月2日
私はまだこの問題に取り組んでいます。私はVBA/6を知りません、ほとんど基本的なJSだけなので、少し迷っています。これが私がこれまでにしたことです:
Sub HTTPInternetPutFile()
' create new object with WinHttpRequest for this operation
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim FormFields As String
' initialize variables that we will set and pass as parameters
Dim sfpath
Dim strURL As String
Dim StrFileName As String
StrFileName = "CLIPrDL.csv"
sfpath = "C:\CLIPr\"
strURL = "http://s0106001c10187ab1.gv.shawcable.net/uploadtest/upload_file.php"
WinHttpReq.Open "POST", strURL, False
' Set headers
WinHttpReq.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
WinHttpReq.setRequestHeader "Accept-Charset", "ISO-8859-1,utf-8"
WinHttpReq.setRequestHeader "Content-Type", "multipart/form-data"
' WinHttpReq.setRequestHeader "Content-Type", "text/html;charset=UTF8"
WinHttpReq.setRequestHeader "Content-Disposition", "form-data; name=""userfile[]"""
' I dont understand this... why use fileup??
FormFields = """filename=" & StrFileName & """"
FormFields = FormFields & "&"
FormFields = FormFields & sfpath
' so comment it out for now
' WinHttpReq.Send FormFields
WinHttpReq.Send sfpath & StrFileName
' output this var to a message box becuase I dont know what it does really
MsgBox FormFields
' Display the status code and response headers.
MsgBox WinHttpReq.GetAllResponseHeaders
MsgBox WinHttpReq.ResponseText
End Sub
スクリプトの下部にあるメッセージボックスは、サーバーのヘッダーと応答(空白のHTMLページ)を出力します。サーバーを満足させるためにヘッダーに設定していないものがあるように感じます(注:Content-Typeをコメントアウトしてみてください)。
VBA / 6でWinHttpRequestオブジェクトを使用してHTTP経由でバイナリファイルをPOSTした経験のある人がいる場合は、助けてください。:)