简体   繁体   English

C#Web代理请求

[英]C# Web Proxy request

I am trying to make a web proxy. 我正在尝试制作一个Web代理。 Here is what I have so far: 这是我到目前为止的内容:

    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>

And how I read the request: 以及我如何阅读请求:

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

The request looks like this: 该请求看起来像这样:

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

And as you can see I sent this exactly. 如您所见,我发送的正是此邮件。 The problem is that the program stops at the sr.ReadToEnd() method. 问题在于程序在sr.ReadToEnd()方法处停止。 It is just waiting for the data to arrive, but nothing happens. 它只是在等待数据到达,但是什么也没有发生。 If I send a wrong request, then it works, so the browser displays the wrong request page (400). 如果我发送了错误的请求,那么它将起作用,因此浏览器将显示错误的请求页面(400)。

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

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM