从响应中读取文本
HttpWebRequest request = WebRequest.Create("http://google.com") as HttpWebRequest; request .Accept = "application/xrds+xml"; HttpWebResponse response = (HttpWebResponse)request .GetResponse(); WebHeaderCollection header= response.Headers;
这里谷歌返回文本。 如何阅读?
你的"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(); }
接受的答案不正确地处理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); }
我只是自己试了一下,它给了我200 OK的回应,但没有内容 – 内容长度是0.你确定它给你的内容? 无论如何,我会假设你真的有内容。
获取实际的文本依赖于知道编码,这可能是棘手的。 它应该在Content-Type头部,但是你必须parsing它。
但是,如果这实际上是 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()
来返回响应stream。 不要忘记close
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;