Inetコントロールを使い、ファイルをPOST(アップロード)したいのですが、どなたかご存知有りませんか?
過去ログでは「ブラウザを開いた」解決策がありましたが、どうしてもプログラム上からPOSTしなければならないので・・・・・(; ;)
FTPサーバにファイルコピーしたい、という意味なら
Inet1.Execute , "PUT ファイル名 ファイル名"
Sayさん、ごめんなさい。
書き方が悪かったですね。HTTPでCGIを叩いてPOSTするんですが、
勿論サーバはRFC1867サポートのサーバです。
multipart 形式でファイルをアップし様としているのですが・・・。
とりあえず,ヘルプは読みましょう。
http://www.microsoft.com/japan/developer/library/vbcon98/vbconusinginternettransfercontrol.htm
とか,
http://www.microsoft.com/japan/developer/library/inet98/vbmthInetExecuteMethod.htm
とか。
前者にはPOSTの仕方が載っていますし,後者はExecuteメソッドのヘルプです。
これを見れば,
Inet1.Execute "http://www.foo.com/cgi-bin/bar.cgi", "POST", "data……", "Content-Type: Multipart/Mixed" & vbCrLf
のようにすればよいことがわかります。
#文字列を直接書くのはどうかと思いますが……。
確かにPOSTの方法とExecuteメソッドは載っています。が問題は、別に有るようです。
今現在、ネット上のパケットを確認しながら作業をしているのですが、不思議な事にブラウザからCGIを叩いてアップした状態と、殆ど同じパケットが流れいて、ブラウザからだとアップ出来るのに、PGからだとアップできない・・・・・。
ちなみに、
Inet1.Execute gStrUpURL, "POST", strPostData, strHeader
としていて、strPostDataの中が multipartです。
具体的には、
strHeader が
"Content-Type: multipart/form-data; boundary=-------------------------72263772263770" & vbCrLf
strPostData が
---------------------------72263772263770
Content-Disposition:form-data;name="ostype"
MSWin32
---------------------------72263772263770
Content-Disposition:form-data;name="File";filename="Shot.jpg"
Content-Type:image/pjpeg
・・・ファイルの内容をバイナリ−で挿入・・・
---------------------------72263772263770
Content-Disposition:form-data;name="id"
aaaa
---------------------------72263772263770--
っと、こんな感じですね。
実際のブラウザからも、boundary値で区切られた、同様のデータが流れ出ています。
・・・・・・ワカラナイ。
あ、もちろん、ファイル内容はブラウザからアップした場合と同じ内容でした。
一体、何が悪いんでしょうか?
ブラウザからアップ出来ると言う事は、CGI自体は正常と考えて良いと思うのですが・・・・・。
自己レスです。
Inetコントロールはバイナリデータを扱えませんでした。
結局、Winsockで通信する事にして、あえなく解決・・・・・。
Inetコントロールってテキストだけなんですね。
文字列にバイト型でデータ突っ込んでも、パケットコードは化けてた・・・。
お騒がせ致しました。<(_ _)>
ツイート | ![]() |