Visual C#을 사용하여 GET 요청 만들기

이 문서에서는 Visual C#을 GET 사용하여 인터넷에서 웹 페이지를 검색하도록 요청하는 방법을 설명합니다.

원래 제품 버전: Visual Studio
원래 KB 번호: 307023

요약

Microsoft .NET Framework 웹 요청을 수행할 수 있는 기능을 포함하여 네트워킹에 유용한 많은 클래스를 포함합니다.

이 문서에서는 다음 .NET Framework 클래스 라이브러리 네임스페이스를 참조합니다.

  • System.Net
  • System.IO

요구 사항

다음 목록에서는 필요한 권장 하드웨어 및 소프트웨어를 간략하게 설명합니다.

  • Windows
  • Visual Studio

참고

프록시 서버 뒤에 있는 경우 이 문서의 코드를 테스트하려면 내부 웹 주소 또는 정적 프록시 값( 웹 페이지 요청 섹션의 5단계 및 6단계 참조)이 있어야 합니다.

웹 페이지 요청

프로그래밍 방식으로 웹 페이지를 검색하는 기능에는 많은 용도가 있습니다. 이 기능은 인터넷 전송 제어를 통해 또는 WinINet(Windows Internet) API에 대한 직접 코딩을 통해 Visual Basic 프로그래머에게 제공되었습니다.

.NET에서 네임스페이 System.Net 스는 인터넷 리소스에 대한 요청을 캡슐화하는 클래스와 WebResponse 반환되는 데이터를 나타내는 클래스를 제공합니다WebRequest.

이러한 개체를 사용하면 특정 요청에 대한 응답을 나타내는 스트림을 가져올 수 있습니다. 스트림이 있는 경우 로컬 텍스트 파일이나 다른 원본에서 읽은 것처럼 응답을 읽을 수 있습니다.

요청을 수행 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 메서드를 통해서만 이 작업을 수행할 수 있습니다( 개체가 WebRequest 잘못됨). 에 대한 호출의 일부로 대상 URL을 Create 제공하여 이 값이 있는 개체를 초기화합니다.

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. 로컬 네트워크 외부에서 URL을 요청하려는 경우 프록시 뒤에 있는 경우 개체를 WebProxy 만든 다음 개체에 이 개체를 제공해야 합니다 WebRequest . 개체에는 WebProxy 아래 샘플 코드에 설정되지 않은 다양한 속성이 있으므로 인터넷 Explorer 프록시 설정을 통해 설정할 수 있는 것과 동일한 기본 정보를 지정할 수 있습니다.

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. 인터넷 Explorer 이미 구성된 설정을 사용하려는 경우 클래스의 GetDefaultProxy 정적 메서드를 WebProxy 사용할 수 있습니다.

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    참고

    Visual Studio 2005 또는 Visual Studio 2008에서 메서드가 GetDefaultProxy 작동합니다. 그러나 이 메서드는 더 이상 사용되지 않습니다. .NET Framework 2.0의 메서드에 대한 GetDefaultProxy 자세한 내용은 .NET Framework V2.0 사용되지 않는 형식/멤버 목록(어셈블리별)을 참조하세요.

  9. 대상 URL을 설정하고 적용 가능한 프록시 정보를 제공하여 요청 설정을 완료한 경우 요청을 사용하여 요청에 대한 응답에 해당하는 개체를 가져올 Stream 수 있습니다.

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    
  10. 응답 스트림이 있는 경우 다른 스트림을 사용하는 것처럼 스트림을 사용할 수 있으며 스트림 줄의 내용을 한 줄씩 또는 모두 동시에 읽을 수 있습니다. 다음 샘플 코드 루프는 각 줄을 콘솔에 출력하여 메서드가 null을 ReadLine 반환할 때까지 한 번에 한 줄씩 스트림을 읽습니다.

    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();
        }
    }
}