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

解決


Mar  2002-10-11 09:18:29  No: 105166

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


Say  2002-10-11 11:12:55  No: 105167

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

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


Mar  2002-10-11 19:11:18  No: 105168

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


YuO  2002-10-12 01:20:52  No: 105169

とりあえず,ヘルプは読みましょう。
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-12 07:56:25  No: 105170

確かに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-19 07:47:21  No: 105171

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加