- PR -

WEBクライアントの作成について(VB.NET)

1
投稿者投稿内容
コンコルド
会議室デビュー日: 2005/06/11
投稿数: 4
投稿日時: 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日間くらいです^^;
ほとんど初心者の私はどうしても自分で解決できないので、
どなたか知恵をお貸ししてください!
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-06-13 11:38
ちょっと気になった所を。
引用:

コンコルドさんの書き込み (2005-06-11 17:03) より:
'POSTデータの作成
Dim PostData As String
PostData = "dateIndex=1 & month=06 & day=11 & year=2005 & hour=16 & minute=30 & second= 01"


&の前後にスペースが入っていますが、これには何か理由があるんですか?
<INPUT>タグのnameにはスペースが入っているようには見えませんが。

ちなみにIEでテキストボックスにスペースを入れて「送信」ボタンを押してリクエストを出してみましたが、スペースは+に置き換えられてサーバー側に送信されていました。

これが"プロトコル違反"かどうかは分からないので問題解決の助けになるかどうかは分かりませんが。

[ メッセージ編集済み 編集者: 一郎 編集日時 2005-06-13 11:40 ]
コンコルド
会議室デビュー日: 2005/06/11
投稿数: 4
投稿日時: 2005-06-13 22:23
一郎さん、ありがとうございます!
そもそも "&" の前後のスペースは入れてはいけなかったようです。
やっと解決か・・と思ったんですが、、同じエラーが同じ箇所で出てしまいます。

動作確認用として別のサーバ上でPHPにてPOSTデータを表示させて見ました。
HTMLから送信した場合も、VBから送信した場合も全く同じようにPOSTされているようです(スペースがあった時は駄目だったんですが)

ところが送信先を目的のサーバに変更すると、HTMLではOKなのにVBでは”エラー”
という現状です。
相手サーバから強制的に切断されている?ようでもあるので、何か単純で大きな間違いが他にもあるのでしょうか?

RFCなども読んではみているのですが・・

問題を切り分けるよい方法などありませんでしょうか。。


一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-06-14 11:28
いくつか解決の手助けになりそうなものを。

StudyingHTTP
http://www.studyinghttp.net/
HTTPに関して色々書いてあります。

秀まるおのホームページ
http://hide.maruo.co.jp/
秀丸エディタなんかを作っている方のサイトです。
ここの"横取り丸"と"InetSpy"というソフトウェアを使うとサーバーとクライアントのやりとりが見えます。
引用:

コンコルドさんの書き込み (2005-06-13 22:23) より:
動作確認用として別のサーバ上でPHPにてPOSTデータを表示させて見ました。
HTMLから送信した場合も、VBから送信した場合も全く同じようにPOSTされているようです(スペースがあった時は駄目だったんですが)

ところが送信先を目的のサーバに変更すると、HTMLではOKなのにVBでは”エラー”
という現状です。


という所から考えると、ヘッダが問題(例えばHTTP/1.1なのにHostヘッダを送っていないためとか)か、プロキシの問題ではないかと思います。
あ・・・何かそんな気がムンムンしてきた。
コンコルド
会議室デビュー日: 2005/06/11
投稿数: 4
投稿日時: 2005-06-14 11:55
一郎さん、ありがとうございます
いただいた情報を全て確認してみます!
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2005-06-14 12:06
その他モニタリングツールではFiddlerなどなど。
コンコルド
会議室デビュー日: 2005/06/11
投稿数: 4
投稿日時: 2005-06-18 20:47
ありがとうございます!ようやく解決できました。

エラーの原因は一郎さんのご指摘の通り、バージョンの問題でした。httpwebrequestのデフォルトではHTTP/1.1だったのをとりあえず1.0にしたら通信できました。

HTTP/1.1の約束として
1:Host ヘッダを正しく送信できる
2:チャンク形式転送コーディングを正しく解釈できる
3:持続的接続、及び Connection ヘッダを正しく解釈できる
4:100 レスポンスを正しく解釈できる
(StudyingHTTPより)との事ですが、2あたり?が問題だったのかな。。

詳しくわかったら報告しようと思います
それにしてもモニターツールは便利ですね〜、お蔭様でなんとかトンネルから出られました、本当に感謝感謝です。
一郎さん、えんぞさん、ありがとうございました
1

スキルアップ/キャリアアップ(JOB@IT)