Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TcpClient与带有CCProxy的WebClient_C#_Proxy_Tcpclient - Fatal编程技术网

C# TcpClient与带有CCProxy的WebClient

C# TcpClient与带有CCProxy的WebClient,c#,proxy,tcpclient,C#,Proxy,Tcpclient,我有以下代码: using (TcpClient tc = new TcpClient()) { button1.Enabled = false; //string Data = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("user:123")); //tc.Connect("bot.whati

我有以下代码:

        using (TcpClient tc = new TcpClient())
        {
            button1.Enabled = false;
            //string Data = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("user:123"));
            //tc.Connect("bot.whatismyipaddress.com", 80);
            //tc.Connect("xxx.xx.xxx.xxx", 3128); external proxy works
            try
            {
                //tc.Connect("192.168.1.2", 808); internal proxy doesn't work
                using (NetworkStream ns = tc.GetStream())
                {
                    using (StreamWriter sw = new StreamWriter(ns))
                    {
                        using (StreamReader sr = new StreamReader(ns))
                        {
                            sw.Write(@"GET / HTTP/1.1
Host: bot.whatismyipaddress.com
Connection: close
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 OPR/28.0.1750.40
DNT: 1
Accept-Encoding: gzip, deflate, lzma, sdch
Accept-Language: en-US,en;q=0.8

");
                            sw.Flush();
                            string Res = sr.ReadToEnd();
                            richTextBox1.Text = Res;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                richTextBox1.Text = ex.Message;
            }
            button1.Enabled = true;
        }
    }
这对任何外部代理URL都很好,但我想尝试身份验证部分,所以我使用了CCProxy,然后我意识到代码不能与本地CCProxy一起工作(尽管WebClient工作得很好),TcpClient respond是完全空的

我不知道它是如何在外部工作的,而不是在内部工作的! [编辑] 除了ccproxy之外,还有其他方法测试身份验证吗?

好的,这是答案

byte[] buffer = new byte[2048];
        int bytes;
        using (TcpClient tc = new TcpClient("192.168.1.2", 808))
        {                
            button1.Enabled = false;                
            NetworkStream stream = tc.GetStream();

            // Establish Tcp tunnel
            byte[] tunnelRequest = Encoding.UTF8.GetBytes(String.Format("CONNECT {0}:80  HTTP/1.1\r\nHost: {0}\r\n\r\n", "bot.whatismyipaddress.com"));
            stream.Write(tunnelRequest, 0, tunnelRequest.Length);
            stream.Flush();

            // Read response to CONNECT request
            bytes = stream.Read(buffer, 0, buffer.Length);
            richTextBox1.Text  = Encoding.UTF8.GetString(buffer, 0, bytes);
            // Establish Get
            tunnelRequest = Encoding.UTF8.GetBytes(String.Format(@"GET / HTTP/1.1
Host: bot.whatismyipaddress.com
Connection: close
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 OPR/28.0.1750.40
DNT: 1
Accept-Encoding: gzip, deflate, lzma, sdch
Accept-Language: en-US,en;q=0.8

"));
            stream.Write(tunnelRequest, 0, tunnelRequest.Length);
            stream.Flush();
            bytes = stream.Read(buffer, 0, buffer.Length);
            richTextBox1.Text += Encoding.UTF8.GetString(buffer, 0, bytes);
            button1.Enabled = true;
我必须先“连接”代理才能通过它打开连接,然后像往常一样发送“GET”。 以及实现用户和pass(基本授权)


我已经编辑了你的标题。请看,“,其中的共识是“不,他们不应该”。CCProxy究竟是什么样的代理?HTTP代理?为了支持HTTP代理,您需要创建特殊的HTTP请求并将它们发送到代理,而您的代码并没有这样做。WebClient等可以自动处理这些问题。为什么不直接使用它们?@Matti Virkkunen:我已经知道如何使用WebClient,但我想学习如何处理TcpClient,是的,它是HTTP代理,监听端口808。但它确实与外部代理配合得很好!!给我另一种测试身份验证的方法。。代理代码可以很好地与外部代理配合使用。
string Data = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("user:123"));
byte[] tunnelRequest = Encoding.UTF8.GetBytes(String.Format("CONNECT {0}:80  HTTP/1.1\r\nHost: {0}\r\nProxy-Authorization: Basic {1}\r\n\r\n", "bot.whatismyipaddress.com", Data));