Read text from response

0 votes
asked Jul 17, 2010 by niraj-choubey
    HttpWebRequest request = WebRequest.Create("http://google.com") as HttpWebRequest;  

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

 WebHeaderCollection header= response.Headers;  

Here google returns text. How to read it?

5 Answers

0 votes
answered Jan 17, 2010 by decyclone

response.GetResponseStream() should be used to return the response stream. And don't forget to close the Stream and Response objects.

0 votes
answered Jan 17, 2010 by cubanx

This article gives a good overview of using the HttpWebResponse object:How to use HttpWebResponse

Relevant bits below:

              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;
0 votes
answered Jan 17, 2010 by jon-skeet

I've just tried that myself, and it gave me a 200 OK response, but no content - the content length was 0. Are you sure it's giving you content? Anyway, I'll assume that you've really got content.

Getting actual text back relies on knowing the encoding, which can be tricky. It should be in the Content-Type header, but then you've got to parse it etc.

However, if this is actually XML (e.g. from "http://google.com/xrds/xrds.xml"), it's a lot easier. Just load the XML into memory, e.g. via LINQ to XML. For example:

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

If the content is XML, getting the result into an XML object model (whether it's XDocument, XmlDocument or XmlReader) is likely to be more valuable than having the plain text.

0 votes
answered Jul 17, 2010 by stw

Your "application/xrds+xml" was giving me issues, I was receiving a Content-Length of 0 (no response).

After removing that, you can access the response using 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();
        }
0 votes
answered Jan 9, 2013 by sam

The accepted answer does not correctly dispose the WebResponse or decode the text. Also, there's a new way to do this in .NET 4.5.

To perform an HTTP GET and read the response text, do the following.

.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);
}
Welcome to Q&A, where you can ask questions and receive answers from other members of the community.
Website Online Counter

...