Frameworkのクラス・ライブラリには次の2系統のクラスが用意されている(いずれもSystem.NET名前空間のクラス)。WebClientクラスWebRequestクラス/WebResponseクラスとその派生クラス前者のWebClientクラスは、典型的なWebページ処理をメソッドとしてまとめ簡略化したクラスである。その内部では後者のWebRequestクラス/WebResponseクラスが利用されている。本稿では、WebClientクラスを利用してWebページを取得する基本的な方法についてまとめる。WebClientクラスの2種類のメソッド通常、WebページへアクセスにはHTTPプロトコルのGETメソッド(GETリクエスト)あるいはPOSTメソッド(POSTリクエスト)が使用されるが、WebClientクラスで用意されているメソッドも、利用されるHTTPプロトコルのメソッドにより2種類に分けることができる。GETメソッド・ベースPOSTメソッド・ベース・DownloadDataメソッド・DownloadFileメソッド・OpenReadメソッド・OpenWriteメソッド・UploadDataメソッド・UploadFileメソッド・UploadValuesメソッドWebClientクラスに用意されている2種類のメソッド本稿ではGETメソッドをベースとする3つのWebClientクラスのメソッドについて解説する。ちなみに、POSTメソッドをベースとするアップロード用のメソッドは、日本語データ送信時にエンコード処理が必要になるような場合などにはあまりシンプルには使えず、WebRequestクラス/WebResponseクラスを使用するのと大して手間は変わらない。このためここではそれらの解説は割愛する(WebRequestクラス/WebResponseクラスを使ったPOSTメソッドによるアップロードについては別稿で解説予定)。DownloadFileメソッドによるWebページのファイルへの保存WebページやWeb上のデータ(画像や圧縮ファイルなど)を取得し、そのデータをファイルとして保存したいだけであれば、WebClientクラスのDownloadFileメソッドが最もお手軽だ。DownloadFileメソッドでは、対象となるページやファイルのURLと、それを保存するファイル名をパラメータで指定するだけでよい。以下にそのサンプル・プログラムを示す。wcget1.vbDownloadFileメソッドによりWebページをファイルに保存するVB.NETのサンプル・プログラム(wcget1.vb)wcget1.vbのダウンロードこのプログラムでは、Google(http://www.google.co.jp/)のトップ・ページのHTMLデータを取得し、それをカレント・ディレクトリに「google.html」というファイル名で保存する。OpenReadメソッドによるWebページの取得アプリケーションからWebページを取得する場合には、取得したデータをプログラムで処理したい場合が多い。このような場合にはOpenReadメソッドあるいは後述するDownloadDataメソッドを利用する。OpenReadメソッドでは、パラメータとして対象ページのURLを指定して呼び出すと、そのページ・データを読み取るためのストリーム(Streamオブジェクト)が返される。ストリームからページのHTMLデータを文字列として取得するには、そのページで使用されている文字コードに対応したEncodingオブジェクトとともにStreamReaderクラス(System.IO名前空間)を使ってページの内容を読み出せばよい(Encodingオブジェクトについては「TIPS:文字列をシフトJISとしてバイト列に変換するには?」や「TIPS:Encodingクラスで扱えるエンコーディング名は?」などを参照)。以下にそのサンプル・プログラムを示す。wcget2.vbOpenReadメソッドによりWebページを取得するVB.NETのサンプル・プログラム(wcget2.vb)wcget2.vbのダウンロードプログラムからGoogleにアクセスした場合には、ページの文字コードはデフォルトではシフトJISになるようなので(これについては後述)、このプログラムではシフトJIS用のEncodingオブジェクトを使ってページ内容を読み出し、画面に出力している。DownloadDataメソッドによるWebページの取得WebClientクラスのDownloadDataメソッドでは、ストリームからページ・データを取り出し、すべてのデータをバイト配列に格納するまでをメソッドが面倒みてくれる。以下のサンプル・プログラムでは、取得したバイト配列のデータをシフトJISの文字列に変換し、画面に表示する(この変換ついては「バイト列を文字列に変換するには?」を参照)。wcget3.vbDownloadDataメソッドによりWebページを取得するVB.NETのサンプル・プログラム(wcget3.vb)wcget3.vbのダウンロードHeadersプロパティによるヘッダ情報の追加ここまでのサンプル・プログラムでは、Googleから取得したページ・データの文字コードはすべて「シフトJIS」となっている。IEでGoogleにアクセスした場合には、ブラウザが受け取るページ・データの文字コードは「UTF-8」となっているはずだ。これはアクセスしているクライアントをGoogleが判別して、クライアントの種類(IEや携帯電話のブラウザなど)により送信するデータを変えているためだ。通常、IEなどのブラウザは、Webページ取得時には以下のような「名前(User-Agent)と値(Mozilla/4.0〜)」のペアをリクエスト・データのヘッダ情報(HTTPヘッダ)に埋め込んでリクエストを送信する(「値」となる文字列は環境によって異なる)。XP)このようなヘッダ情報がリクエストに含まれていない場合には、GoogleはシフトJISのページを返すようだ。WebClientクラスを使ってページを取得する際に、Webサイトに送信されるヘッダ情報を設定したい場合には、WebClientオブジェクトのHeadersプロパティに対して、Addメソッドにより「名前」と「値」のペアをあらかじめ追加しておけばよい。wcget4.vbUser-Agentを設定してページを取得するVB.NETのサンプル・プログラム(wcget4.vb)wcget4.vbのダウンロードこのプログラムの場合には、DownloadDataメソッドにより取得したバイト・データをUTF-8の文字列に変換して出力している。画面に出力される処理結果の先頭部分を見れば、<head>タグのcharset属性の値が「Shift_JIS」から「UTF-8」に変化しているのが分かるはずだ。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。