C#Web代理请求

时间:2012-01-03 14:35:08

标签: c# proxy httpwebrequest

我正在尝试创建一个Web代理。以下是我到目前为止的情况:

    IPHostEntry IPHost = Dns.GetHostEntry(sURL);
    Console.WriteLine("Resolved:{0}", IPHost.HostName);
    string[] aliases = IPHost.Aliases;
    IPAddress[] address = IPHost.AddressList;
    Console.WriteLine(address[0]);

    IPEndPoint sEndpoint = new IPEndPoint(address[0], 80);
    Socket IPsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,   ProtocolType.Tcp);
   IPsocket.Connect(sEndpoint);
   if (IPsocket.Connected)
   {
      Console.WriteLine("Socket OK");
   }   

   NetworkStream ns = new NetworkStream(IPsocket);
   StreamWriter sw = new StreamWriter(ns);
   StreamReader sr = new StreamReader(ns);

   for (int i = 0; i < lista.Count; i++)
   {
      sw.WriteLine(lista[i]);
      Console.WriteLine(lista[i]);
   }
   sw.Flush();
   string response = sr.ReadToEnd();</pre>

我如何阅读请求:

StreamReader sr = new StreamReader(s);
string plusz = "";
plusz = sr.ReadLine();
while (plusz != "")
{
    lista.Add(plusz);
        plusz = sr.ReadLine();
}
return lista;

请求如下所示:

GET http://google.com/ HTTP/1.1
Host: google.com
Proxy-Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: hu-HU,hu;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.3
Cookie: rememberme=true; NID=54=l  
(...)
 pY

正如你所看到的,我发送了这封信。问题是程序在sr.ReadToEnd()方法停止。它只是在等待数据到达,但没有任何反应。如果我发送了错误的请求,那么它可以工作,因此浏览器会显示错误的请求页面(400)。

1 个答案:

答案 0 :(得分:0)

namespace ProxyTester
{

class Program
{
    static void Main(string[] args)
    {
        var htmlResponse = new StringBuilder();
        var RequestPage = BuildHttpRequest("https://google.com/");
        GetHttpResponse(RequestPage, htmlResponse);
    }

    public static HttpWebRequest BuildHttpRequest(string url)
    {
        try
        {
            var getPage = (HttpWebRequest)WebRequest.Create(url);
            WebProxy proxyHTTP = new WebProxy("201.38.194.50", 53128);


            getPage.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            getPage.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.19) Gecko/20110707 Firefox/3.6.19";
            getPage.ProtocolVersion = HttpVersion.Version11;
            getPage.Method = "GET";
            getPage.Proxy = proxyHTTP;
            getPage.Timeout = 10000;
            getPage.ReadWriteTimeout = 10000;
            return getPage;
        }
        catch (WebException ex)
        {
            Console.WriteLine(ex.ToString());
        }

        return null;
    }

    public static bool GetHttpResponse(HttpWebRequest page,  StringBuilder htmlResponse)
    {
        htmlResponse.Length = 0; 
        try
        {
            Console.WriteLine("A");
           // var pageResponse = page.GetResponse();
            page.Timeout = 10000;
            var pageResponse = (HttpWebResponse)page.GetResponse();
            Console.WriteLine("5 minutes!");
            if (pageResponse.StatusCode == HttpStatusCode.OK)
            {

                var reader = new StreamReader(pageResponse.GetResponseStream());
                htmlResponse.Append(reader.ReadToEnd());
                pageResponse.Close();
                reader.Close();
                return true;
            }
            Console.WriteLine(pageResponse.StatusCode.ToString());
            pageResponse.Close();
            return false;
        }
        catch (WebException ex)
        {
            Console.WriteLine(ex.ToString());
        }

        return false;
    }
}

}