WebBrowserからの<INPUT type="file">へのPOST

解決


ハイライト  2008-02-29 15:55:04  No: 100371  IP: 192.*.*.*

【開発環境】
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にエンコードするための関数です。

編集 削除
やじゅ  2008-02-29 16:05:48  No: 100372  IP: 192.*.*.*

そもそも、strDataの引用符の囲みがおかしいから、
コンパイルエラーになってませんか?

編集 削除
ハイライト  2008-02-29 16:14:27  No: 100373  IP: 192.*.*.*

申し訳ありません。ダブルコーテンションは気にしないでください。

実際は""""としてあります。

編集 削除
やじゅ  2008-03-01 09:44:57  No: 100374  IP: 192.*.*.*

ファイルのアップロードは一般的にはFTPを使います。
HTTPでPOSTで送る場合は、ファイルのデータもUNICODEに
変換して送る必要があります。
http://www.motobit.com/tips/detpg_uploadvbaie/

編集 削除
YuO  2008-03-03 00:21:24  No: 100375  IP: 192.*.*.*

最初のデータのヘッダの後の区切りがおかしくないですか?
改行が一つ (=フィールドの末尾) しか書かれていませんが。

つまり,
> strData = strData & "Content-Disposition: form-data; name="MAX_FILE_SIZE" & vbCrLf
> strData = strData & "40000000" & vbCrLf
の2行の間に改行を追加する必要があるのだと思いますが。


> HTTPでPOSTで送る場合は、ファイルのデータもUNICODEに
> 変換して送る必要があります。
そんなことはないです。
それではバイナリを送信できませんから。

編集 削除
ハイライト  2008-03-03 19:56:21  No: 100376  IP: 192.*.*.*

ありがとうございます。下記ページに書かれているコードそのままでできました。

http://www.motobit.com/tips/detpg_uploadvbaie/

編集 削除