【開発環境】
Windows XP Pro SP3 / Visual Basic 6.0 SP6
WebBrowserを利用してファイルをPOSTすることを試みています。
下記のような、通常のPOSTは問題なくできます。この手のブラウザ操作はいつも、ieHTTPHeadersを見て、流れているデータをそのままPOSTしているものです。
Private Sub LOGIN()
Dim strURL As String
Dim strData As String
Dim strHeader As String
strURL = "http://www.post.com/login.php"
strData = "id=xxxxx"
strData = strData & "&pwd=xxxxx"
strHeader = "Content-Type: application/x-www-form-urlencoded"
WebBrowser1.Navigate2 strURL, , , DATA_POST(strData),strHeader
End Sub
同じように、ファイルをPOSTした際に流れているデータをブラウザからPOSTしているのですが、データはPOSTされていません。コードは以下です。
Private Sub FILE_POST()
Dim strURL As String
Dim strData As String
Dim strHeader As String
strURL = "http://www.post.com/upload.php"
strData = "-----------------------------7d825d2020334" & vbCrLf
strData = strData & "Content-Disposition: form-data; name="MAX_FILE_SIZE" & vbCrLf
strData = strData & "40000000" & vbCrLf
strData = strData & vbCrLf
strData = strData & "-----------------------------7d825d2020334" & vbCrLf
strData = strData & "Content-Disposition: form-data; name="csv_file"; filename="C:\Documents and Settings\Administrator\デスクトップ\xxx.csv" & vbCrLf
strData = strData & "Content-Type: application/vnd.ms-excel" & vbCrLf
strData = strData & vbCrLf
strData = strData & "メール" & vbCrLf
strData = strData & "xxx@xxx.jp" & vbCrLf
strData = strData & vbCrLf
strData = strData & "-----------------------------7d825d2020334" & vbCrLf
strData = strData & "Content-Disposition: form-data; name="insert" & vbCrLf
strData = strData & vbCrLf
strData = strData & "登録" & vbCrLf
strData = strData & "-----------------------------7d825d2020334--" & vbCrLf
strHeader = "Content-Type: multipart/form-data; boundary=---------------------------7d825d2020334" & vbCrLf
WebBrowser1.Navigate2 strURL, , , DATA_POST(URL_ENCODE(strData)),strHeader
End Sub
POSTする際のURL_ENCODE関数は、strDataをSHIFT-JISにエンコードするための関数です。
そもそも、strDataの引用符の囲みがおかしいから、
コンパイルエラーになってませんか?
申し訳ありません。ダブルコーテンションは気にしないでください。
実際は""""としてあります。
ファイルのアップロードは一般的にはFTPを使います。
HTTPでPOSTで送る場合は、ファイルのデータもUNICODEに
変換して送る必要があります。
http://www.motobit.com/tips/detpg_uploadvbaie/
最初のデータのヘッダの後の区切りがおかしくないですか?
改行が一つ (=フィールドの末尾) しか書かれていませんが。
つまり,
> strData = strData & "Content-Disposition: form-data; name="MAX_FILE_SIZE" & vbCrLf
> strData = strData & "40000000" & vbCrLf
の2行の間に改行を追加する必要があるのだと思いますが。
> HTTPでPOSTで送る場合は、ファイルのデータもUNICODEに
> 変換して送る必要があります。
そんなことはないです。
それではバイナリを送信できませんから。
ありがとうございます。下記ページに書かれているコードそのままでできました。
http://www.motobit.com/tips/detpg_uploadvbaie/