Прочитать текст ответа

    HttpWebRequest request = WebRequest.Create("http://google.com") as HttpWebRequest;  

    request .Accept = "application/xrds+xml";  
    HttpWebResponse response = (HttpWebResponse)request .GetResponse();  

 WebHeaderCollection header= response.Headers;  

Здесь google возвращает текст. Как его прочитать?

Ответ 1

Ваш "application/xrds+xml" давал мне проблемы, я получал Content-Length из 0 (без ответа).

После этого вы можете получить доступ к ответу с помощью response.GetResponseStream().

        HttpWebRequest request = WebRequest.Create("http://google.com") as HttpWebRequest;

        //request.Accept = "application/xrds+xml";  
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        WebHeaderCollection header = response.Headers;

        var encoding = ASCIIEncoding.ASCII;
        using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
        {
            string responseText = reader.ReadToEnd();
        }

Ответ 2

Принятый ответ неправильно отображает WebResponse или декодирует текст. Кроме того, есть новый способ сделать это в .NET 4.5.

Чтобы выполнить HTTP GET и прочитать текст ответа, сделайте следующее.

.NET 1.1 - 4.0

public static string GetResponseText(string address)
{
    var request = (HttpWebRequest)WebRequest.Create(address);

    using (var response = (HttpWebResponse)request.GetResponse())
    {
        var encoding = Encoding.GetEncoding(response.CharacterSet);

        using (var responseStream = response.GetResponseStream())
        using (var reader = new StreamReader(responseStream, encoding))
            return reader.ReadToEnd();
    }
}

.NET 4.5

public static async Task<string> GetResponseText(string address)
{
    using (var httpClient = new HttpClient())
        return await httpClient.GetStringAsync(address);
}

Ответ 3

Я только что попробовал это сам, и он дал мне ответ 200 OK, но никакого контента - длина содержимого равнялась 0. Вы уверены, что это дает вам контент? Во всяком случае, я предполагаю, что у вас действительно есть контент.

Получение фактического текста обратно зависит от знания кодировки, что может быть сложно. Он должен быть в заголовке Content-Type, но тогда вы должны разобрать его и т.д.

Однако, если это фактически XML (например, от http://google.com/xrds/xrds.xml"), это намного проще. Просто загрузите XML в память, например. через LINQ to XML. Например:

using System;
using System.IO;
using System.Net;
using System.Xml.Linq;
using System.Web;

class Test
{
    static void Main()
    {
        string url = "http://google.com/xrds/xrds.xml";
        HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);

        XDocument doc;
        using (WebResponse response = request.GetResponse())
        {
            using (Stream stream = response.GetResponseStream())
            {
                doc = XDocument.Load(stream);
            }
        }
        // Now do whatever you want with doc here
        Console.WriteLine(doc);
    }   
}

Если содержимое является XML, получение результата в объектной модели XML (будь то XDocument, XmlDocument или XmlReader) скорее всего будет более ценным, чем простой текст.

Ответ 4

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.google.com");
        request.Method = "GET";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string strResponse = reader.ReadToEnd();

Ответ 5

response.GetResponseStream() следует использовать для возврата потока ответов. И не забудьте close объекты Stream и Response.

Ответ 6

В этой статье представлен хороший обзор использования объекта HttpWebResponse: Как использовать HttpWebResponse

Соответствующие биты ниже:

              HttpWebResponse webresponse;

              webresponse = (HttpWebResponse)webrequest.GetResponse();

              Encoding enc = System.Text.Encoding.GetEncoding(1252);
              StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream(),enc);

              string Response = loResponseStream.ReadToEnd();

              loResponseStream.Close();
              webresponse.Close();

              return Response;