次の方法で共有


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

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

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

まとめ

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

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

  • System.Net
  • System.IO

要件

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

  • Windows
  • Visual Studio

Note

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

Web ページを要求する

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

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

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

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

  1. Visual Studio を起動します。

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

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

  4. コードの後半でこれらの名前空間からの宣言を修飾する必要がないように、 System 名前空間、 System.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 メソッド (new WebRequest オブジェクトが無効です) を介してのみ実行できます。 この値を持つオブジェクトを初期化する Create の呼び出しの一部としてターゲット URL を指定します。

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

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. Internet Explorer で既に構成されている設定を使用する場合は、WebProxy クラスのGetDefaultProxy静的メソッドを使用できます。

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Note

    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 行ずつ、またはすべて同時に読み取ることができます。 次のサンプル コード ループは、 ReadLine メソッドが null を返すまでストリームを一度に 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();
        }
    }
}