HttpWebRequest request = WebRequest.Create("http://google.com") as HttpWebRequest;
request.Accept = "application/xrds+xml";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
WebHeaderCollection header = response.Headers;
Hier gibt Google Text zurück. Wie lese ich es?
WebHeaderCollection
Zeile nicht erforderlich ist, um den Antworttext abzurufen.HttpResponseContext
, aber ich kann den Text nicht in das Objekt einlesen (verständliches Format). Beispiel:HttpResponseMessage response = wc.GetAsync(URI).Result;
var contents = response.Content.ReadAsStringAsync();
Hiercontents
enthält die Variable einige zufällige Daten anstelle der erforderlichen Daten.Die akzeptierte Antwort entsorgt
WebResponse
den Text nicht richtig oder dekodiert ihn nicht . Außerdem gibt es in .NET 4.5 eine neue Möglichkeit, dies zu tun.Gehen Sie wie folgt vor, um ein HTTP-GET durchzuführen und den Antworttext zu lesen.
.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); }
quelle
"http://google.com"
den Parameternamen ersetzenaddress
?Ich habe das gerade selbst versucht und es gab mir eine 200 OK Antwort, aber keinen Inhalt - die Inhaltslänge war 0. Sind Sie sicher , dass es Ihnen Inhalt gibt? Wie auch immer, ich gehe davon aus, dass Sie wirklich zufrieden sind.
Um den eigentlichen Text zurückzubekommen, muss man die Codierung kennen, was schwierig sein kann. Es sollte sich im Content-Type-Header befinden, aber dann müssen Sie es analysieren usw.
Wenn dies jedoch tatsächlich XML ist (z. B. von " http://google.com/xrds/xrds.xml "), ist es viel einfacher. Laden Sie einfach das XML in den Speicher, z. B. über LINQ to XML. Zum Beispiel:
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); } }
Wenn der Inhalt von XML ist, immer das Ergebnis in ein XML - Objektmodell (ob es
XDocument
,XmlDocument
oderXmlReader
) wird wahrscheinlich mehr wert sein als den Klartext mit.quelle
null
zuXDocument.Load
wie auch immer, so gibt es IMO keinen Nutzen. Ich bin im Allgemeinen kein Fan davon, Dinge zu überprüfen, "nur für den Fall, obwohl ich nicht glaube, dass es dies jemals tun könnte". Es gibt eine Zeit und einen Ort dafür, aber wenn Sie diesen Ansatz für jede Methode wählen, kommt es zu einem schrecklichen Durcheinander.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();
quelle
Dieser Artikel bietet einen guten Überblick über die Verwendung des HttpWebResponse-Objekts: Verwendung von HttpWebResponse
Relevante Bits unten:
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;
quelle
response.GetResponseStream()
sollte verwendet werden, um den Antwortstrom zurückzugeben. Und vergessen Sie nichtclose
dieStream
undResponse
Objekte.quelle
Wenn Sie http Anfrage ist Post und
request.Accept = "application/x-www-form-urlencoded";
dann denke ich, können Sie Text der Antwort durch Code unten erhalten:var contentEncoding = response.Headers["content-encoding"]; if (contentEncoding != null && contentEncoding.Contains("gzip")) // cause httphandler only request gzip { // using gzip stream reader using (var responseStreamReader = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))) { strResponse = responseStreamReader.ReadToEnd(); } } else { // using ordinary stream reader using (var responseStreamReader = new StreamReader(response.GetResponseStream())) { strResponse = responseStreamReader.ReadToEnd(); } }
quelle