- PR -

HTTPリクエストのHostヘッダーの指定方法

1
投稿者投稿内容
たけ
常連さん
会議室デビュー日: 2004/02/23
投稿数: 42
お住まい・勤務地: 神奈川県/東京都
投稿日時: 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ヘッダーを指定して
通信を行う方法はないでしょうか。


ご教授よろしく願いいたします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-12-21 13:09
引用:

そこで HttpWebRequest.Headers.Item("Host") で中身を見たところ空でした。



まずはモニターツールで確認ですね。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=22004&forum=28&6


引用:

もしくは、HttpWebRequest以外でもいいのでHTTP/1.1でHostヘッダーを指定して
通信を行う方法はないでしょうか。



Socketクラスを使った原始的な方法で出来るでしょう。


Socketを使ってファイルをダウンロードし表示する
http://dobon.net/vb/dotnet/internet/all.html
たけ
常連さん
会議室デビュー日: 2004/02/23
投稿数: 42
お住まい・勤務地: 神奈川県/東京都
投稿日時: 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を使ってやれば、ここらへんの問題は解決できそうですね。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-12-21 16:57
私は、HttpWebRequest どころか .NET でソケット自体使ったことないんので推測だけで勝手ななことを書きますが・・・。

HttpWebRequest には任意のヘッダを設定する手立ては用意されていないのですか? 私は、HttpWebRequest.Headers.Item("Host") への代入でそれができるように思います。それとも自分で Host ヘッダを設定しても送信直前に空にされてしまうということでしょうか?

見当違いなこと言っていたらすみません。
たけ
常連さん
会議室デビュー日: 2004/02/23
投稿数: 42
お住まい・勤務地: 神奈川県/東京都
投稿日時: 2005-12-22 10:24
HttpWebRequestにはヘッダーを指定するための手段が提供されています。

しかし、HostとDateはシステムが勝手に設定するようになっていて、
自分で任意のものを設定できるようにはなっていないのです。



未だにヘッダーが空になっている原因はわかりませんが、
HttpWebRequestでHostを指定するのは無理なようなので、
Socketクラスを使ってやってみます。
1

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