Home > C# > 目的別 > Web関連 > WebClient

C#で、WebClientクラスのOpenReadメソッドを使用してインターネットから情報を取得する

新規作成日 2017-10-25
最終更新日

WebClientクラスのOpenReadメソッドを使用すると、URLで指定したリソースをストリームとして取得することができます。

このコードでは、インターネットからファイルや画像などのリソースをストリームに読み込み、コンソールに表示します。

using System;
using System.IO;
using System.Net;

namespace GetWebsite02
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = @"https://vdlz.xyz/";

            WebClient wc = new WebClient();

            try
            {
                using (Stream stream = wc.OpenRead(url))
                using(StreamReader sr = new StreamReader(stream))
                {
                    // Add a user agent header in case the 
                    // requested URI contains a query.
                    // 要求されたURIに、問合せが含まれる場合に備えて、
                    // ユーザー・エージェント・ヘッダを追加します。

                    wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
                    string str = sr.ReadToEnd();
                    Console.WriteLine(str);
                }
            }
            catch(Exception e)
            {
                // Let the user know what went wrong.
                // ユーザーに、何が問題になったのかを知らせます。
                // The file could not be read:
                Console.WriteLine("指定されたサイトを読み取れませんでした:");
                Console.WriteLine(e.Message);
            }

            // Keep the console window open in debug mode.
            // デバッグモードで、コンソール・ウインドウを開いた状態に維持します。
            System.Console.WriteLine("何かキーを押すと終了します。");
            System.Console.ReadKey();
        }
    }
}

このコードは、DownloadStringメソッドで紹介したコードと同じ結果がえられます。

ストリームに読み込む明確な理由はよくわかりませんが、処理速度に違いがある可能性がありますので、大量にインターネット上のリソースを処理する場合は、ストリームを使う場合と、使わない場合で、処理速度の比較をしたほうがよいかと思います。

usingステートメントのネスト

この例では、usingが2種類の方法で使用されています。コードの先頭で使用する名前空間を宣言しているのは、usingディレクティブ、 コードの途中で、自動的に自動的にDispose()メソッドを呼び出すために使用されているものが、usingステートメントです。

この例のように、usingステートメントがネストしている場合は、外側の括弧を省略できます。

                using (Stream stream = wc.OpenRead(url))
                using(StreamReader sr = new StreamReader(stream))
                {
                    ...
                }
このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」