- - PR -
WEBクライアントの作成について(VB.NET)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-11 17:03
いつも大変おせわになっています
WEB画面にて情報などを入力するようになっているサーバに自動でアクセスさせるクライアントソフトを作ろうとしています。 例:HTMLの日時画面では以下でサーバの日時を設定できます (ファイル名;192.168.0.1/ppdate.htm) ------------------------------ <html> <BODY> <FORM action=http://192.168.0.1/PPdate method=post> <INPUT type=text value=2005 name=year>年 <INPUT type=text value=06 name=month >月 <INPUT type=text value=11 name=day>日<br> <INPUT type=text value=16 name=hour>時 <INPUT type=text value=30 name=minute>分 <INPUT type=text value=00 name=second>秒<br> <INPUT type=hidden value=1 name=dateIndex> <INPUT type=submit value=送信> </Form> </BODY></HTML> --------------------------------- これをVB.NETで作ろうとしているのですが、エラーになってしまうのです コードは以下になります Dim Enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") 'HttpWebRequestの作成 Dim webreq As System.Net.HttpWebRequest webreq = CType(System.Net.WebRequest.Create("http://192.168.0.1/PPdate"), System.Net.HttpWebRequest) '認証の設定 webreq.Credentials = New System.Net.NetworkCredential("Username", "Possword") webreq.Method = "POST" webreq.ContentType() = "application/x-www-form-urlencoded" 'POSTデータの作成 Dim PostData As String PostData = "dateIndex=1 & month=06 & day=11 & year=2005 & hour=16 & minute=30 & second= 01" '送信データの作成 Dim postDataBytes As Byte() = System.Text.Encoding.ASCII.GetBytes(PostData) 'POST送信するデータの長さを指定 webreq.ContentLength = postDataBytes.Length 'データをPOST送信するためのStreamを取得 Dim webreqStream As System.IO.Stream = webreq.GetRequestStream() '送信するデータを書き込む webreqStream.Write(postDataBytes, 0, postDataBytes.Length) webreqStream.Close() 'HttpWebResponseの取得 Dim webres As System.Net.HttpWebResponse webres = CType(webreq.GetResponse, System.Net.HttpWebResponse) '//ここでエラー!! '受信して表示 Dim st As System.IO.Stream = webres.GetResponseStream() Dim sr As New System.IO.StreamReader(st, Enc) TextBox1.Text = (sr.ReadToEnd()) '閉じる sr.Close() st.Close() webres= のところで System.Net.WebException' のハンドルされていない例外が system.dll で発生しました。追加情報 : 基になる接続が閉じられました : サーバーによって HTTP プロトコル違反が発生しました。 というエラーになります。 サーバでは PPdate.htm(日時を入力) ↓ PPdateにデータをPOST ↓ PPdate.htmに戻って更新された日時を表示 という流れになっています はまり続けて20日間くらいです^^; ほとんど初心者の私はどうしても自分で解決できないので、 どなたか知恵をお貸ししてください! | ||||
|
投稿日時: 2005-06-13 11:38
ちょっと気になった所を。
&の前後にスペースが入っていますが、これには何か理由があるんですか? <INPUT>タグのnameにはスペースが入っているようには見えませんが。 ちなみにIEでテキストボックスにスペースを入れて「送信」ボタンを押してリクエストを出してみましたが、スペースは+に置き換えられてサーバー側に送信されていました。 これが"プロトコル違反"かどうかは分からないので問題解決の助けになるかどうかは分かりませんが。 [ メッセージ編集済み 編集者: 一郎 編集日時 2005-06-13 11:40 ] | ||||
|
投稿日時: 2005-06-13 22:23
一郎さん、ありがとうございます!
そもそも "&" の前後のスペースは入れてはいけなかったようです。 やっと解決か・・と思ったんですが、、同じエラーが同じ箇所で出てしまいます。 動作確認用として別のサーバ上でPHPにてPOSTデータを表示させて見ました。 HTMLから送信した場合も、VBから送信した場合も全く同じようにPOSTされているようです(スペースがあった時は駄目だったんですが) ところが送信先を目的のサーバに変更すると、HTMLではOKなのにVBでは”エラー” という現状です。 相手サーバから強制的に切断されている?ようでもあるので、何か単純で大きな間違いが他にもあるのでしょうか? RFCなども読んではみているのですが・・ 問題を切り分けるよい方法などありませんでしょうか。。 | ||||
|
投稿日時: 2005-06-14 11:28
いくつか解決の手助けになりそうなものを。
StudyingHTTP http://www.studyinghttp.net/ HTTPに関して色々書いてあります。 秀まるおのホームページ http://hide.maruo.co.jp/ 秀丸エディタなんかを作っている方のサイトです。 ここの"横取り丸"と"InetSpy"というソフトウェアを使うとサーバーとクライアントのやりとりが見えます。
という所から考えると、ヘッダが問題(例えばHTTP/1.1なのにHostヘッダを送っていないためとか)か、プロキシの問題ではないかと思います。 あ・・・何かそんな気がムンムンしてきた。 | ||||
|
投稿日時: 2005-06-14 11:55
一郎さん、ありがとうございます
いただいた情報を全て確認してみます! | ||||
|
投稿日時: 2005-06-14 12:06
その他モニタリングツールではFiddlerなどなど。
| ||||
|
投稿日時: 2005-06-18 20:47
ありがとうございます!ようやく解決できました。
エラーの原因は一郎さんのご指摘の通り、バージョンの問題でした。httpwebrequestのデフォルトではHTTP/1.1だったのをとりあえず1.0にしたら通信できました。 HTTP/1.1の約束として 1:Host ヘッダを正しく送信できる 2:チャンク形式転送コーディングを正しく解釈できる 3:持続的接続、及び Connection ヘッダを正しく解釈できる 4:100 レスポンスを正しく解釈できる (StudyingHTTPより)との事ですが、2あたり?が問題だったのかな。。 詳しくわかったら報告しようと思います それにしてもモニターツールは便利ですね〜、お蔭様でなんとかトンネルから出られました、本当に感謝感謝です。 一郎さん、えんぞさん、ありがとうございました |
1