Webページにsubmitしか無い場合、どのようにPOSTしますか

解決


itachi  2012-01-10 03:19:49  No: 147425

サイトのソースが以下のようになっていました。
<form method="post" action="http://xxx.xx.xx/?aaa=1">
<input type="submit" value="実行" />
</form>

この場合、HttpWebRequestでPOSTするにはどのようにすればいいでしょうか。
空のデータは送れず、偽のデータを入れてもリモートサーバからエラーが・・・。
(URLにaaa=1が付いてるのが何かしら関係している?)

コード一部抜粋
Dim vals As Hashtable = New Hashtable()
Dim param As String = vbNullString
Dim data As Byte()
Dim req As HttpWebRequest
Dim reqStream As Stream

'--- ポストデータ ---
vals("") = "" '←送るデータがない...
For Each i As String In vals.Keys
     param += String.Format("{0}={1}&", i, vals(i))
Next
data = Encoding.GetEncoding("utf-8").GetBytes(param)

'--- リクエスト作成 ---
req = CType(WebRequest.Create(url), HttpWebRequest)
req.Method = "POST"
req.ContentLength = data.Length

'--- ポストデータ書き込み ---
reqStream = req.GetRequestStream()
reqStream.Write(data, 0, data.Length)
reqStream.Close()


itachi  2012-01-10 03:22:59  No: 147426

コードに誤りがありました。

誤:req = CType(WebRequest.Create(url), HttpWebRequest)
正:req = CType(WebRequest.Create("http://xxx.xx.xx/?aaa=1"),HttpWebRequest)


YuO  2012-01-10 07:44:37  No: 147427

本体には何も出力しないのが正しいかと。
# Fiddler等でPOST内容をキャプチャしてみるとよいかと思います。

HttpWebRequestは,HTTP/1.1での通信時に,
Expect: 100-continue
というフィールドを追加します。
このフィールド,大抵のサーバーでエラーの原因になるので,
req.ServicePoint.Expect100Continue = false;
を入れるようにすることで,回避できます。

過去にこのことで調べた時に見つけたサイトのURLを以下に書いておきます。
http://haacked.com/archive/2004/05/15/http-web-request-expect-100-continue.aspx


itachi  2012-01-11 02:30:18  No: 147428

ご回答ありがとうございます。

>本体には何も出力しないのが正しいかと。
urlを指定してGetResponseすれば通りました。
ありがとうございました。


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

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






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