サイトのソースが以下のようになっていました。
<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()
コードに誤りがありました。
誤:req = CType(WebRequest.Create(url), HttpWebRequest)
正:req = CType(WebRequest.Create("http://xxx.xx.xx/?aaa=1"),HttpWebRequest)
本体には何も出力しないのが正しいかと。
# 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
ご回答ありがとうございます。
>本体には何も出力しないのが正しいかと。
urlを指定してGetResponseすれば通りました。
ありがとうございました。