Прочитать текст ответа
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;