Visual C# を使用して GET 要求を行う

この記事では、Visual C# を使用してインターネットから Web ページを取得するように要求する方法 GET について説明します。

元の製品バージョン: Visual Studio
元の KB 番号: 307023

概要

Microsoft .NET Frameworkには、Web 要求を行う機能など、ネットワークに役立つ多くのクラスが含まれています。

この記事では、次の.NET Framework クラス ライブラリ名前空間について説明します。

  • System.Net
  • System.IO

要件

次の一覧では、必要な推奨ハードウェアとソフトウェアの概要を示します。

  • Windows
  • Visual Studio

注:

プロキシ サーバーの背後にいる場合は、この記事のコードをテストするには、内部 Web アドレスまたは静的プロキシ値 (「 Web ページの要求 」セクションの手順 5 と 6 を参照) が必要です。

Web ページを要求する

Web ページをプログラムで取得する機能には、多くの用途があります。 この機能は、インターネット転送制御または Windows インターネット (WinINet) API に対する直接コーディングを通じて、Visual Basic プログラマに提供されました。

.NET では、名前空間はSystem.Net、インターネット リソースの要求をカプセル化するクラスとWebResponse、返されるデータを表すクラスを提供WebRequestします。

これらのオブジェクトを使用すると、特定の要求に対する応答を表すストリームを取得できます。 ストリームがある場合は、ローカル テキスト ファイルまたは他のソースから読み取るのと同じように応答を読み取ることができます。

要求を行うには、次の GET 手順に従います。

  1. Visual Studio を起動します。

  2. Visual C# で新しいコンソール アプリケーションを作成します。 Visual Studio では、パブリック クラスと空 Main のメソッドが自動的に作成されます。

  3. プロジェクトが 少なくとも を参照していることを確認 System.dll

  4. コードの後半でこれらの名前空間からの宣言をSystemSystem.NET修飾する必要がないように、名前空間、名前空間、およびSystem.IO名前空間 (ストリーム オブジェクトの場合) に using ディレクティブを使用します。 これらのステートメントは、他の宣言の前に使用する必要があります。

    using System;
    using System.Net;
    using System.IO;
    
  5. この例では、URL を変数としてハードコーディングします。 実際のシステムでは、この値を関数のパラメーターとして、またはコンソール アプリケーションのコマンド ライン引数として受け取る可能性があります。

    string sURL;
    sURL = "http://www.contoso.com";
    
  6. 新しい WebRequest オブジェクトを作成します。 これを行うには、クラスのWebRequest静的Createメソッドを使用する必要があります (新しいオブジェクトWebRequestは無効です)。 の呼び出し Create の一部としてターゲット URL を指定して、この値を持つオブジェクトを初期化します。

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. ローカル ネットワークの外部で URL を要求し、プロキシの背後にいる場合は、オブジェクトを WebProxy 作成し、オブジェクトにこのオブジェクトを WebRequest 指定する必要があります。 WebProxyオブジェクトには、次のサンプル コードでは設定されていないさまざまなプロパティがあり、インターネット エクスプローラーのプロキシ設定で設定できるのと同じ基本情報を指定できます。

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. インターネット エクスプローラーで既に構成されている設定を使用する場合は、クラスの静的メソッドをGetDefaultProxyWebProxy使用できます。

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    注:

    Visual Studio 2005 または Visual Studio 2008 では、メソッドは GetDefaultProxy 機能します。 ただし、このメソッドは非推奨になりました。 .NET Framework 2.0 のGetDefaultProxyメソッドの詳細については、「.NET Framework V2.0 Obsolete Type/Member List (By Assembly)」を参照してください。

  9. ターゲット URL を設定し、該当するプロキシ情報を指定して要求の設定を完了したら、要求を使用して、要求の応答に対応するオブジェクトを取得 Stream できます。

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    
  10. 応答ストリームがある場合は、他のストリームと同様にストリームを使用できます。また、ストリームの内容を 1 行ずつ、またはすべてを同時に読み取ることができます。 次のサンプル コード ループは、メソッドが null を返すまでストリームを ReadLine 一度に 1 行ずつ読み取り、各行をコンソールに出力します。

    StreamReader objReader = new StreamReader(objStream);
    
    string sLine = "";
    int i = 0;
    
    while (sLine != null)
    {
        i++;
        sLine = objReader.ReadLine();
        if (sLine != null)
            Console.WriteLine("{0}:{1}", i, sLine);
    }
    Console.ReadLine();
    
  11. プログラムを保存して実行します。 環境に合わせてプロキシ情報が正しく構成されていることを確認します (手順 7 と 8 を参照)。 コンソールに番号付けされ、出力された HTML コンテンツの行が表示されます。

完全なコード一覧

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

namespace MakeAGETRequest_charp
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            string sURL;
            sURL = "http://www.contoso.com";

            WebRequest wrGETURL;
            wrGETURL = WebRequest.Create(sURL);

            WebProxy myProxy = new WebProxy("myproxy", 80);
            myProxy.BypassProxyOnLocal = true;

            wrGETURL.Proxy = WebProxy.GetDefaultProxy();

            Stream objStream;
            objStream = wrGETURL.GetResponse().GetResponseStream();

            StreamReader objReader = new StreamReader(objStream);

            string sLine = "";
            int i = 0;

            while (sLine != null)
            {
                i++;
                sLine = objReader.ReadLine();
                if (sLine != null)
                    Console.WriteLine("{0}:{1}", i, sLine);
            }
            Console.ReadLine();
        }
    }
}