다음을 통해 공유


HttpWebRequest.GetResponse 메서드

정의

인터넷 리소스의 응답을 반환합니다.

public:
 override System::Net::WebResponse ^ GetResponse();
public override System.Net.WebResponse GetResponse ();
override this.GetResponse : unit -> System.Net.WebResponse
Public Overrides Function GetResponse () As WebResponse

반환

인터넷 리소스의 응답을 포함하는 WebResponse.

예외

스트림은 BeginGetResponse(AsyncCallback, Object)이전 호출에서 이미 사용 중입니다.

-또는-

TransferEncoding 값으로 설정되고 SendChunkedfalse.

Method GET 또는 HEAD이고 ContentLength 크거나 0과 같거나 SendChunkedtrue.

-또는-

KeepAlive true, AllowWriteStreamBufferingfalse, ContentLength -1, SendChunkedfalse, Method POST 또는 PUT입니다.

-또는-

HttpWebRequest 엔터티 본문이 있지만 GetResponse() 메서드는 GetRequestStream() 메서드를 호출하지 않고 호출됩니다.

-또는-

ContentLength 0보다 크지만 애플리케이션이 약속된 데이터를 모두 쓰지는 않습니다.

요청 캐시 유효성 검사기는 이 요청에 대한 응답을 캐시에서 처리할 수 있음을 나타냅니다. 그러나 이 요청에는 서버로 보낼 데이터가 포함됩니다. 데이터를 보내는 요청은 캐시를 사용하지 않아야 합니다. 이 예외는 잘못 구현된 사용자 지정 캐시 유효성 검사기를 사용하는 경우에 발생할 수 있습니다.

Abort() 이전에 호출되었습니다.

-또는-

요청에 대한 제한 시간이 만료되었습니다.

-또는-

요청을 처리하는 동안 오류가 발생했습니다.

예제

다음 코드 예제에서는 요청에 대한 응답을 가져옵니다.

#using <System.dll>

using namespace System;
using namespace System::Net;
using namespace System::Text;
using namespace System::IO;

// Specify the URL to receive the request.
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   HttpWebRequest^ request = dynamic_cast<HttpWebRequest^>(WebRequest::Create(args[1]));

   // Set some reasonable limits on resources used by this request
   request->MaximumAutomaticRedirections = 4;
   request->MaximumResponseHeadersLength = 4;

   // Set credentials to use for this request.
   request->Credentials = CredentialCache::DefaultCredentials;
   HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse());
   Console::WriteLine("Content length is {0}", response->ContentLength);
   Console::WriteLine("Content type is {0}", response->ContentType);

   // Get the stream associated with the response.
   Stream^ receiveStream = response->GetResponseStream();

   // Pipes the stream to a higher level stream reader with the required encoding format.
   StreamReader^ readStream = gcnew StreamReader(receiveStream, Encoding::UTF8);
   Console::WriteLine("Response stream received.");
   Console::WriteLine(readStream->ReadToEnd());
   response->Close();
   readStream->Close();
}

/*
The output from this example will vary depending on the value passed into Main
but will be similar to the following:

Content length is 1542
Content type is text/html; charset=utf-8
Response stream received.
<html>
...
</html>

*/
using System;
using System.Net;
using System.Text;
using System.IO;

    public class Test
    {
        // Specify the URL to receive the request.
        public static void Main (string[] args)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]);

            // Set some reasonable limits on resources used by this request
            request.MaximumAutomaticRedirections = 4;
            request.MaximumResponseHeadersLength = 4;
            // Set credentials to use for this request.
            request.Credentials = CredentialCache.DefaultCredentials;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            Console.WriteLine("Content length is {0}", response.ContentLength);
            Console.WriteLine("Content type is {0}", response.ContentType);

            // Get the stream associated with the response.
            Stream receiveStream = response.GetResponseStream();

            // Pipes the stream to a higher level stream reader with the required encoding format.
            StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);

            Console.WriteLine("Response stream received.");
            Console.WriteLine(readStream.ReadToEnd());
            response.Close();
            readStream.Close();
        }
    }

/*
The output from this example will vary depending on the value passed into Main
but will be similar to the following:

Content length is 1542
Content type is text/html; charset=utf-8
Response stream received.
<html>
...
</html>

*/
Imports System.Net
Imports System.Text
Imports System.IO


    Public Class Test

        ' Specify the URL to receive the request.
        Public Shared Sub Main(ByVal args() As String)
        Dim request As HttpWebRequest = CType(WebRequest.Create(args(0)), HttpWebRequest)


        ' Set some reasonable limits on resources used by this request
        request.MaximumAutomaticRedirections = 4
        request.MaximumResponseHeadersLength = 4

        ' Set credentials to use for this request.
        request.Credentials = CredentialCache.DefaultCredentials

        Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)

        Console.WriteLine("Content length is {0}", response.ContentLength)
        Console.WriteLine("Content type is {0}", response.ContentType)

        ' Get the stream associated with the response.
        Dim receiveStream As Stream = response.GetResponseStream()

        ' Pipes the stream to a higher level stream reader with the required encoding format. 
        Dim readStream As New StreamReader(receiveStream, Encoding.UTF8)

        Console.WriteLine("Response stream received.")
        Console.WriteLine(readStream.ReadToEnd())
        response.Close()
        readStream.Close()
    End Sub
End Class
'
'The output from this example will vary depending on the value passed into Main 
'but will be similar to the following:
'
'Content length is 1542
'Content type is text/html; charset=utf-8
'Response stream received.
'...
'
'

설명

주의

WebRequest, HttpWebRequest, ServicePointWebClient 사용되지 않으므로 새 개발에 사용하면 안 됩니다. 대신 HttpClient 사용합니다.

GetResponse 메서드는 인터넷 리소스의 응답을 포함하는 WebResponse 개체를 반환합니다. 반환되는 실제 인스턴스는 HttpWebResponseHTTP 관련 속성에 액세스하기 위해 해당 클래스에 대한 typecast가 될 수 있습니다.

HttpWebRequest 클래스에 설정된 속성이 충돌하는 경우 몇 가지 경우에 ProtocolViolationException throw됩니다. 이 예외는 애플리케이션이 ContentLength 속성과 SendChunked 속성을 true설정한 다음 HTTP GET 요청을 보내는 경우에 발생합니다. 이 예외는 애플리케이션이 HTTP 1.0 프로토콜만 지원하는 서버로 청크를 보내려고 하는 경우 발생합니다. 여기서는 지원되지 않습니다. 이 예외는 애플리케이션이 ContentLength 속성을 설정하지 않고 데이터를 보내려고 시도하거나 버퍼링을 사용하지 않도록 설정하고 유지 연결(KeepAlive 속성이 true)에서 SendChunkedfalse 경우 발생합니다.

주의

스트림을 닫고 연결을 해제하려면 Close 메서드를 호출해야 합니다. 이렇게 하지 않으면 애플리케이션에 연결이 부족해질 수 있습니다.

POST 메서드를 사용하는 경우 요청 스트림을 가져와서 게시할 데이터를 작성하고 스트림을 닫아야 합니다. 이 메서드는 콘텐츠 게시 대기를 차단합니다. 시간 제한 집합이 없고 콘텐츠를 제공하지 않으면 호출 스레드가 무기한 차단됩니다.

메모

GetResponse 대한 여러 호출은 동일한 응답 개체를 반환합니다. 요청이 재발행되지 않습니다.

메모

애플리케이션은 특정 요청에 대해 동기 및 비동기 메서드를 혼합할 수 없습니다. GetRequestStream 메서드를 호출하는 경우 GetResponse 메서드를 사용하여 응답을 검색해야 합니다.

메모

WebException throw되는 경우 예외의 ResponseStatus 속성을 사용하여 서버의 응답을 확인합니다.

메모

이 멤버는 애플리케이션에서 네트워크 추적을 사용하도록 설정할 때 추적 정보를 출력합니다. 자세한 내용은 .NET Framework네트워크 추적을 참조하세요.

메모

보안상의 이유로 쿠키는 기본적으로 사용하지 않도록 설정됩니다. 쿠키를 사용하려면 CookieContainer 속성을 사용하여 쿠키를 사용하도록 설정합니다.

적용 대상

추가 정보