Sdílet prostřednictvím


HttpWebRequest.GetResponse Metoda

Definice

Vrátí odpověď z internetového prostředku.

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

Návraty

Odpověď WebResponse z internetového prostředku.

Výjimky

Stream se již používá předchozím voláním BeginGetResponse(AsyncCallback, Object).

-nebo-

TransferEncoding je nastavena na hodnotu a SendChunked je false.

Method je GET nebo HEAD a buď ContentLength je větší nebo rovno nule, nebo SendChunked je true.

-nebo-

KeepAliveis true, is , ContentLengthAllowWriteStreamBuffering is false- 1, SendChunked is false, and Method is POST nebo PUT.

-nebo-

Obsahuje HttpWebRequest tělo entity, ale GetResponse() metoda je volána bez volání GetRequestStream() metody.

-nebo-

Je ContentLength větší než nula, ale aplikace nezapisuje všechna slíbená data.

Validátor mezipaměti požadavku uvedl, že odpověď pro tento požadavek může být obsluhována z mezipaměti; tento požadavek však zahrnuje data, která se mají odeslat na server. Požadavky, které odesílají data, nesmí mezipaměť používat. K této výjimce může dojít, pokud používáte vlastní validátor mezipaměti, který je nesprávně implementován.

Abort() byl dříve volána.

-nebo-

Vypršel časový limit požadavku.

-nebo-

Při zpracování požadavku došlo k chybě.

Příklady

Následující příklad kódu získá odpověď pro požadavek.

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.
'...
'
'

Poznámky

Opatrnost

WebRequest, HttpWebRequest, ServicePointa WebClient jsou zastaralé a neměli byste je používat pro nový vývoj. Místo toho použijte HttpClient.

Metoda GetResponse vrátí WebResponse objekt, který obsahuje odpověď z internetového prostředku. Skutečná vrácená instance je a HttpWebResponsemůže být typecast této třídě pro přístup k vlastnostem specifické pro HTTP.

A ProtocolViolationException je vyvolán v několika případech, když jsou vlastnosti nastavené ve HttpWebRequest třídě konfliktní. K této výjimce dochází, pokud aplikace nastaví ContentLength vlastnost a SendChunked vlastnost na true, a pak odešle požadavek HTTP GET. K této výjimce dochází v případě, že se aplikace pokusí odeslat blok dat na server, který podporuje pouze protokol HTTP 1.0, kde to není podporováno. K této výjimce dochází v případě, že se aplikace pokusí odeslat data bez nastavení ContentLength vlastnosti nebo SendChunked je false při ukládání do vyrovnávací paměti zakázána a při zachování připojení ( KeepAlive vlastnost je true).

Opatrnost

K zavření datového Close proudu a uvolnění připojení musíte volat metodu. Pokud to neuděláte, může dojít k tomu, že aplikace dojde k výpadku připojení.

Při použití metody POST musíte získat stream požadavku, zapisovat data, která se mají publikovat, a zavřít stream. Tato metoda blokuje čekání na publikování obsahu; Pokud není nastavený časový limit a nezadáte obsah, volající vlákno bude blokovat po neomezenou dobu.

Poznámka

Více volání pro GetResponse vrácení stejného objektu odpovědi; požadavek se znovu nesudí.

Poznámka

Vaše aplikace nemůže kombinovat synchronní a asynchronní metody pro konkrétní požadavek. Pokud voláte metodu GetRequestStream , musíte ji použít GetResponse k načtení odpovědi.

Poznámka

WebException Pokud je vyvolán, použijte Response vlastnosti Status výjimky k určení odpovědi ze serveru.

Poznámka

Tento člen vypíše informace o trasování, když ve své aplikaci povolíte trasování sítě. Další informace naleznete v tématu Trasování sítě v rozhraní .NET Framework.

Poznámka

Z bezpečnostních důvodů jsou soubory cookie ve výchozím nastavení zakázané. Pokud chcete soubory cookie používat, použijte CookieContainer tuto vlastnost k povolení souborů cookie.

Platí pro

Viz také