HTTP
最終更新:
atachi
主なクラス
WebClient(MSDN) | シンプルなWebアクセスを行う。ファイルのアップロードなどの機能を簡単に提供する。 |
HttpWebRequest(MSDN) | HTTPプロコトルに特化したWebRequest |
HttpWebResponse(MSDN) | |
HttpUtility(MSDN) |
HTTPに関するユーティリティクラスとして、System.Web名前空間に属するクラスがある。 この名前空間はデフォルトでは読み込まれないので、プロジェクトの参照設定から手動で組み込む必要がある。 .NETをコンパクトで実装しているプロジェクトの場合はこちら |
Webのリクエスト(WebClient版)
WWWサーバー上のファイルを読み込むにはWebClient.OpenRead()を使うとHTTPを使用したリクエストをすべて作成してアクセスするので非常に簡単に該当のデータを読み込むことができる。
WebClient myClient = new WebClient();
Stream response = myClient.OpenRead("http://www.contoso.com/index.htm");
response.Close();
WebClientを使ったリクエストは非常にシンプルなリクエストしか行うことができない。
Webのリクエスト(HttpWebRequest)
GETの場合はリクエストするURIにクエリー文字列を直接記述できる。
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://hogehoge.com?mode=test");
WebResponse res = req.GetResponse();
Stream stream = res.GetResponseStream();
// ストリームからデータの読み込み
stream.Close();
POSTの場合は、WebRequestから書き込み用のStreamを取得しそこにクエリーに含める文字列を追加する。
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://hogehoge.com");
req.Method = "POST"; // POSTによるアクセスモード
req.ContentType = "application/x-www-form-urlencoded"; // ContentTypeの指定は必須ではないが
// WWWサーバーに対して行儀のよい作法。
// 相手のWWWサーバーの設定によっては、適切でないContentTypeは
// リクエストを蹴られる場合があるので。
using(StreamWriter requestWriter = new StreamWriter(req.GetRequestStream())) { // C#基本構文(リソース)を参照
requestWriter.Write("mode=test");
}
WebResponse res = req.GetResponse();
Stream stream = res.GetResponseStream();
// ストリームからデータの読み込み
stream.Close();
URLのエンコード
URLには日本語や一部の文字を含めることができません。
HTTPのリクエストでGETを使用する場合は必ずURLのエンコードが必要です。
たとえば、URLにはスペースを含めることができないので、URLのエンコードによって「%2F」というメタデータに変換されます。
URLのエンコードはHttpUtilityクラスのユーティリティメソッドを使います。
string encoded = HttpUtility.UrlEncode(target);
.NET Frameworks Compactでのエンコード
.NET Framework Compact で開発している場合、System.Webを参照できません。
代わりにUriクラスを使用してエンコードすることができます。(UTF-8のみ)
string escaped = Uri.EscapeUriString("ほげほげ");