- - PR -
HTTPリクエストのHostヘッダーの指定方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-21 11:46
お世話になります。
VB.NETでHTTPクライアント作成しています。 これでサーバにアクセスするのですが、 その際にHTTP/1.1でアクセスしなければなりません。 色々調べたところ、 HttpWebRequest はデフォルトで HTTP/1.1 で通信をすることがわかったので HttpWebRequest を使ってサーバにアクセスしてみたのですが、 サーバ側からHostが指定されていないというエラーが返されてしまいました。 そこで HttpWebRequest.Headers.Item("Host") で中身を見たところ空でした。 MSDNでには Hostは「システムにより現在のホスト情報に設定されます。」と書いてあるのですが、 これを自分で設定する方法はないのでしょうか。 もしくは、HttpWebRequest以外でもいいのでHTTP/1.1でHostヘッダーを指定して 通信を行う方法はないでしょうか。 ご教授よろしく願いいたします。 | ||||||||
|
投稿日時: 2005-12-21 13:09
まずはモニターツールで確認ですね。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=22004&forum=28&6
Socketクラスを使った原始的な方法で出来るでしょう。 Socketを使ってファイルをダウンロードし表示する http://dobon.net/vb/dotnet/internet/all.html | ||||||||
|
投稿日時: 2005-12-21 15:24
todoさん、ご回答ありがとうございます。
申し訳ありませんが、1つ情報を書き忘れていました。 私が作っているプログラムはPocketPC用なんです。 そのためモニタリングツールが使えないので、通信の中身を確認することが出来ません。 ためしにPocketPC用のプログラムをWindows2000上で動作させ、 「Fiddler」で通信をモニタリングしてみました。 その結果、Fiddlerで見るとHostヘッダーはちゃんと指定されていました。 (http://wwww.yahoo.co.jpにアクセスすればwww.yahoo.co.jpが指定されていました) しかし、プログラム中で HttpWebRequest.Headers.Item("Host") HttpWebRequest.Headers.toString でヘッダーを見るとやはり空でした。 自分のヘッダー内容の確認方法がまずいのかと思い、 ためしにプログラム中で自分でヘッダーをしてみたら (HttpWebRequest.ContentType = "application/x-www-form-urlencoded")、 それは上記のコードでもFiddlerでもちゃんと確認できました。 ちょっと現象の原因がつかめません。 なにかヒントになるようなことがあればご教授ください。 Socketを使ってやれば、ここらへんの問題は解決できそうですね。 | ||||||||
|
投稿日時: 2005-12-21 16:57
私は、HttpWebRequest どころか .NET でソケット自体使ったことないんので推測だけで勝手ななことを書きますが・・・。
HttpWebRequest には任意のヘッダを設定する手立ては用意されていないのですか? 私は、HttpWebRequest.Headers.Item("Host") への代入でそれができるように思います。それとも自分で Host ヘッダを設定しても送信直前に空にされてしまうということでしょうか? 見当違いなこと言っていたらすみません。 | ||||||||
|
投稿日時: 2005-12-22 10:24
HttpWebRequestにはヘッダーを指定するための手段が提供されています。
しかし、HostとDateはシステムが勝手に設定するようになっていて、 自分で任意のものを設定できるようにはなっていないのです。 未だにヘッダーが空になっている原因はわかりませんが、 HttpWebRequestでHostを指定するのは無理なようなので、 Socketクラスを使ってやってみます。 |
1