|
.NET TIPS WebRequest/WebResponseクラスでWebページを取得するには?デジタルアドバンテージ 遠藤 孝信2005/06/10 |
![]() |
|
|
|
アプリケーションからWebページを取得する場合(HTTPプロトコルのGETメソッドによる取得の場合)、「TIPS:WebClientクラスでWebページを取得するには?」で解説しているようにWebClientクラス(System.Net名前空間)を利用するのが最も簡便だが、ページ取得時により細かな制御を行いたいときにはWebRequestクラス/WebResponseクラス(ともにSystem.Net名前空間)が使用できる。本稿では、これら2つのクラスの基本的な利用方法について解説する。
WebRequest/WebResponseクラスによるWebページの取得
通常、WebRequestクラスとWebResponseクラスはペアで使用する。
Webページを取得するには、最初にWebRequestクラスによりWebサーバへ送信するリクエストを作成する。次に、そのGetResponseメソッドを呼び出してWebサーバへのリクエストの送信および、そのレスポンス(応答)の取得を行う。レスポンスを表すクラスがWebResponseクラスである。具体的なコードは次のようになる(C#の場合。VB.NETの場合は下記のサンプル・プログラムを参照)。
WebRequest req = WebRequest.Create(url); // リクエストの作成
WebResponse res = req.GetResponse(); // 送信とレスポンスの取得
リクエストの作成を行うのにWebRequestクラスをnewによりインスタンス化するのではなく、静的メソッドであるCreateメソッドを呼び出さなくてはならないところに注意が必要だ(これについては後述)。
このようにして取得したレスポンス(WebResponseオブジェクト)については、そのGetResponseStreamメソッドを呼び出してページ・データに対するストリーム(Streamクラスのオブジェクト)を得ることができる。後はそのストリームからデータを読み出してメモリやファイルに保存するなどすればよい(WebClientクラスではこれらの作業まで行ってくれる)。
次のサンプル・プログラムは、Google(http://www.google.co.jp/)のトップ・ページにアクセスし、得られたストリームからページ・データをStreamReaderクラス(System.IO名前空間)により文字列として文字列変数に読み込む。
|
|
| WebRequest/WebResponseクラスによりWebページをダウンロードするC#のサンプル・プログラム(webreqres1.cs) | |
|
|
| WebRequest/WebResponseクラスによりWebページをダウンロードするVB.NETのサンプル・プログラム(webreqres1.vb) | |
GetResponseStreamメソッドによりストリームを取得した場合には、Closeメソッドによりそのストリームを閉じてリソースを解放する必要がある。これにはWebResponseオブジェクトのCloseメソッドを呼び出してもよい。
WebResponseクラスの派生クラスであるHttpWebRequestクラス
上記のサンプル・プログラムの場合、WebResponseクラスのCreateメソッドが返すオブジェクトは、実際にはWebResponseクラスの派生クラスであるHttpWebRequestクラス(System.Net名前空間)のオブジェクトである。これは、Createメソッドのパラメータで渡されたURLのスキーム名が「http」であるためだ。
もしURLがファイルの場所を示す「file://」で始まっているならば、Createメソッドは同じくWebResponseクラスの派生クラスであるFileWebRequestクラス(System.Net名前空間)のオブジェクトを返す。このように、WebRequestクラスはさまざまなURLのスキームに対応できるようになっている(.NET Framework 2.0ではFTPに対応したFtpWebRequestクラスが追加される)。
WebページのURLをCreateメソッドで指定した場合には、その戻り値をHttpWebRequest型にキャストして、それをHttpWebRequestクラスのオブジェクトとして扱うことができる。HTTPプロトコルに固有の機能をリクエストに設定したい場合には、このようなキャストが必要となる。
User-Agentを設定したWebページの取得
ここではHttpWebRequest型へのキャストが必要となる例として、「TIPS:WebClientクラスでWebページを取得するには?」の最後で行ったような、User-Agentを指定したWebページの取得について取り上げる。
WebClientクラスではUser-Agentの設定はリクエストのヘッダ(Headersプロパティ)に追加する必要があったが、HttpWebRequestクラスでは独立したUserAgentプロパティにより、その値を設定できる。
次のサンプル・プログラムでは、WebRequestオブジェクトをHttpWebRequest型にキャストし、UserAgentプロパティを設定してからGoogleのトップ・ページを取得する。この場合に取得されるページの文字コードはUTF-8となる。
|
|
| HttpWebRequestクラスを使用したC#のサンプル・プログラム(webreqres2.cs) | |
|
|
| HttpWebRequestクラスを使用したVB.NETのサンプル・プログラム(webreqres2.vb) | |
ちなみに今回の場合、Createメソッドと同様に、WebRequestクラスのGetResponseメソッドが返すオブジェクトは、実際にWebResponseクラスの派生クラスであるHttpWebResponseクラスのオブジェクトである。このため、例えばレスポンスからクッキー(Cookiesプロパティ)を取り出したい場合などは、GetResponseメソッドの戻り値をHttpWebResponse型にキャストしなければならない。![]()
| カテゴリ:クラス・ライブラリ 処理対象:ネットワーク 使用ライブラリ:WebRequestクラス(System.Net名前空間) 使用ライブラリ:WebResponseクラス(System.Net名前空間) 使用ライブラリ:StreamReaderクラス(System.IO名前空間) 使用ライブラリ:HttpWebRequestクラス(System.Net名前空間) 使用ライブラリ:HttpWebResponseクラス(System.Net名前空間) 関連TIPS:WebClientクラスでWebページを取得するには? |
| 「.NET TIPS」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


