There has been a semi-frequent request on forums and such for people who want to do an HTTP request from their application (either web or client) and get the response as a string back so that they can process it from there.  I had some code that did something similar, so I figured I'd modify it and post it here for all to use. 

This will work in any application, either Windows Client, or as part of a Web Application (if you wanted to create a magic proxy site). 

using System;
using System.IO;
using System.Net;

namespace HTTPReader
{
    
class HTTPReader
    {

        
public static string GetHTML(string url, string proxy)
        {
            
            System.Net.
WebRequest wr = System.Net.WebRequest.Create(url);
            wr.Timeout = 2500;
// 2.5 seconds
            if (!String.IsNullOrEmpty(proxy))
            {
                System.Net.
WebProxy myProxy = new System.Net.WebProxy(proxy, true);
                wr.Proxy = myProxy;
            }
            
using (System.Net.WebResponse wresp = wr.GetResponse())
            {
                
Stream s = wresp.GetResponseStream();
                
using (StreamReader sr = new StreamReader(s))
                {
                    
return sr.ReadToEnd();
                }
            }
        }
    }
}

Edit1: You know, one thing I love about the community, you tell me when I'm wrong, or can do things better.  This is slightly updated after poppyto provided a few suggestions!  Thanks!

Edit2: Thanks to toub, I've added his suggested changes.  It's fair to note, that I'm not catching any exceptions in here, and that is intentional.  You could wrap this in a try catch block, but I'd rather you handle this how you want your app to deal with it.