.NET でちょっとしたプログラミング(3)
2008 年 5 月 19 日 by itoこんにちは ito です。
前回の投稿 より間が空いてしまいましたが、第三回は、.NET Frameworkを使った、具体的なプログラミングの例を示したいと思います。Java等のプログラミング言語と同様ですが、.NET Frameworkの強みの1つは、たくさんの便利なライブラリが同梱されていることです。(.NET ではこれを「クラスライブラリ」といいます)
今回はそのライブラリの中から、System.Net名前空間の便利なクラスを使っていきます。System.Net名前空間の「Net」は、.NET Frameworkの「NET」とは関係がなく、「Network」の意味です。今回利用するのは、Webページを閲覧するときに利用されるプロトコルであるHTTPを利用するためのクラスです。Webページをプログラム経由で取得することで得られるメリットもいくつかありますので、具体的な例をご紹介します。
まず、今回アクセスするURLは、「http://google.jp」とします。PCでお使いのWebブラウザにて、http://google.jp を表示しようとすると「http://www.google.co.jp/ig?hl=ja」や「http://www.google.co.jp/」というところに転送(リダイレクト)されます。
実はこの、http://google.jpというアドレスは、「Google モバイル(http://www.google.co.jp/mobile/)」のためのアドレスでした。Googleのサーバ側では、このアドレスに対してのリクエストを処理する際に、リクエストがPCからのものなのか、モバイルからのものなのか、というのを判別して、それに対応したコンテンツを返しています。では、次に同じことをプログラムから行ってみましょう。
using System; using System.Net; using System.IO; using System.Text; class PCClient { static void Main(string[] args){ // アクセス先URL String url = "http://google.jp"; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); // 実際にリクエストを行う WebResponse res = req.GetResponse(); // Streamとして受け取り、最後まで読み込んで表示する。 // 文字コードはShift_JISと限定して読みこみます。 Stream st = res.GetResponseStream(); StreamReader sr = new StreamReader(st, Encoding.GetEncoding("Shift_JIS")); String html = sr.ReadToEnd(); sr.Close(); st.Close(); // 読み込んだコンテンツを出力します Console.WriteLine(html); } }
前回までと同じく、このファイルをPCClient.csとして保存し、以下のコマンドでコンパイルします。
csc PCClient.cs
実行し、結果をtemp.htmlに保存してみましょう。
PCClient.exe > temp.html
保存したファイルを、InternetExploreやメモ帳などで開き、先ほど転送されたページの内容と見比べてみましょう。コマンドにより、対象のURLのコンテンツが取得できたことがわかると思います。Webブラウザから閲覧した場合と同様、PCからのアクセスとして認識されているということもわかるでしょう。
転送された先を把握して、きちんとその内容を取得してくれるクラスライブラリは、たとえばJavaの標準機能には存在せず、.NET Frameworkの便利な機能のひとつといえるでしょう。
次回は、Googleモバイルのコンテンツを、「モバイルからのアクセスとして」閲覧する方法をご紹介します。同様の方法により「MacOSからのアクセスとして」処理させたり、「Internet ExplorerではなくOperaからのアクセスとして」処理させたりする方法もあります。たとえばInternet Explorer系のみで利用できるActiveX等の技術を使ったサイトへのアクセスに対しては「お使いのブラウザではこのページを表示することができません」といったようなメッセージを出したり、Googleのように携帯からのアクセス、PCからのアクセスに応じて別々のページを表示するようなサイトを構成している場合に、実際の端末を使うことなくテストをするなどの方法に役に立てることができます。
タグ: .NET