Читать текст из ответа
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 ответов:
код
"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
theStream
и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;