InetコントロールでファイルをPOSTするには?

解決


Mar  2002-10-11 00:18:29  No: 105166  IP: [192.*.*.*]

Inetコントロールを使い、ファイルをPOST(アップロード)したいのですが、どなたかご存知有りませんか?
過去ログでは「ブラウザを開いた」解決策がありましたが、どうしてもプログラム上からPOSTしなければならないので・・・・・(; ;)

編集 削除
Say  2002-10-11 02:12:55  No: 105167  IP: [192.*.*.*]

FTPサーバにファイルコピーしたい、という意味なら

Inet1.Execute , "PUT ファイル名 ファイル名"

編集 削除
Mar  2002-10-11 10:11:18  No: 105168  IP: [192.*.*.*]

Sayさん、ごめんなさい。
書き方が悪かったですね。HTTPでCGIを叩いてPOSTするんですが、
勿論サーバはRFC1867サポートのサーバです。
multipart 形式でファイルをアップし様としているのですが・・・。

編集 削除
YuO  2002-10-11 16:20:52  No: 105169  IP: [192.*.*.*]

とりあえず,ヘルプは読みましょう。
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
のようにすればよいことがわかります。
#文字列を直接書くのはどうかと思いますが……。

編集 削除
Mar  2002-10-11 22:56:25  No: 105170  IP: [192.*.*.*]

確かに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自体は正常と考えて良いと思うのですが・・・・・。

編集 削除
Mar  2002-10-18 22:47:21  No: 105171  IP: [192.*.*.*]

自己レスです。
Inetコントロールはバイナリデータを扱えませんでした。
結局、Winsockで通信する事にして、あえなく解決・・・・・。
Inetコントロールってテキストだけなんですね。
文字列にバイト型でデータ突っ込んでも、パケットコードは化けてた・・・。
お騒がせ致しました。<(_ _)>

編集 削除