10

ここで尋ねられる質問: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した経験のある人がいる場合は、助けてください。:)

4

2 に答える 2

16

これ(WinInetを使用)はVB6ですが、VBA/Excelでも機能するはずです。

http://wqweto.wordpress.com/2011/07/12/vb6-using-wininet-to-post-binary-file/

于 2012-08-13T23:13:04.910 に答える
2

私は以下のものを正常に使用しています(ADODB.StreamとWinHttp.WinHttpRequest.5.1を使用しています):

http://www.ericphelps.com/scripting/samples/reference/web/http_post.txt

(ウェブサイトが消えた場合は、インターネットアーカイブでも利用できます

于 2017-01-11T11:26:50.903 に答える