Читать текст из ответа


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

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

WebHeaderCollection header = response.Headers;

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

6 53

6 ответов:

код "application/xrds+xml" давал мне проблемы, я получал длину содержимого 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();
}

принятый ответ не правильно распоряжаться 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

private static readonly HttpClient httpClient = new HttpClient();

public static async Task<string> GetResponseText(string address)
{
    return await httpClient.GetStringAsync(address);
}

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

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

однако, если это на самом деле 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), вероятно, будет более ценным, чем обычный текст.

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

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

эта статья дает хороший обзор использования объекта 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;