Поделиться через


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 больше или равно нулю или SendChunkedtrue.

-или-

KeepAlive true, AllowWriteStreamBufferingfalse, ContentLength равно -1, SendChunkedfalse, а Method — POST или PUT.

-или-

HttpWebRequest имеет тело сущности, но метод GetResponse() вызывается без вызова метода GetRequestStream().

-или-

ContentLength больше нуля, но приложение не записывает все обещанные данные.

Проверяющий элемент кэша запросов указывает, что ответ на этот запрос можно обслуживать из кэша; однако этот запрос включает данные, которые будут отправляться на сервер. Запросы, отправляющие данные, не должны использовать кэш. Это исключение может возникать, если вы используете настраиваемый проверяющий элемент кэша, который неправильно реализован.

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, ServicePointи WebClient устарели, и их не следует использовать для новой разработки. Вместо этого используйте HttpClient.

Метод GetResponse возвращает объект WebResponse, содержащий ответ из ресурса Интернета. Фактический возвращаемый экземпляр представляет собой HttpWebResponseи может быть введен в этот класс для доступа к свойствам HTTP.

ProtocolViolationException возникает в нескольких случаях, когда свойства, заданные в классе HttpWebRequest, конфликтуют. Это исключение возникает, если приложение задает свойство ContentLength и свойство SendChunked для true, а затем отправляет HTTP-запрос GET. Это исключение возникает, если приложение пытается отправить блоки на сервер, поддерживающий протокол HTTP 1.0, где это не поддерживается. Это исключение возникает, если приложение пытается отправить данные без установки свойства ContentLength или SendChunkedfalse при отключении буферизации и при сохранении подключения (свойство KeepAlivetrue).

Осторожность

Чтобы закрыть поток и освободить подключение, необходимо вызвать метод Close. Сбой в этом случае может привести к тому, что приложение не упустит подключения.

При использовании метода POST необходимо получить поток запроса, записать данные для публикации и закрыть поток. Этот метод блокирует ожидание публикации содержимого; Если не задано время ожидания, и вы не предоставляете содержимое, вызывающий поток блокируется на неопределенный срок.

Заметка

Несколько вызовов для GetResponse возвращают один и тот же объект ответа; запрос не переиздается.

Заметка

Приложение не может смешивать синхронные и асинхронные методы для конкретного запроса. При вызове метода GetRequestStream необходимо использовать метод GetResponse для получения ответа.

Заметка

Если возникает WebException, используйте свойства Response и Status исключения, чтобы определить ответ с сервера.

Заметка

Этот элемент выводит сведения о трассировке при включении трассировки сети в приложении. Дополнительные сведения см. в разделе трассировки сети в.NET Framework.

Заметка

По соображениям безопасности файлы cookie отключены по умолчанию. Если вы хотите использовать файлы cookie, используйте свойство CookieContainer для включения файлов cookie.

Применяется к

См. также раздел