C# Http连接请求返回空响应

C# Http连接请求返回空响应,c#,https,windows-8.1,connect,tcpclient,C#,Https,Windows 8.1,Connect,Tcpclient,我想使用TcpClient阅读Https页面。我使用下面的代码 var client = new TcpClient(url, 443);//"127.0.0.1", 8888);// Fiddler port client.SendTimeout = 30000; Stream responseStream = client.GetStream(); // send CONNECT request to server byte[] tunnelRequest = Encoding.ASCII

我想使用
TcpClient
阅读Https页面。我使用下面的代码

var client = new TcpClient(url, 443);//"127.0.0.1", 8888);// Fiddler port
client.SendTimeout = 30000;
Stream responseStream = client.GetStream();

// send CONNECT request to server
byte[] tunnelRequest = Encoding.ASCII.GetBytes("CONNECT www.google.com:443 HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:44.0) Gecko/20100101 Firefox/35.0\r\nProxy-Connection: keep-alive\r\nConnection: keep-alive\r\nHost: www.google.com:443\r\n\r\n");
responseStream.Write(tunnelRequest, 0, tunnelRequest.Length);
responseStream.Flush();

// read CONNECT response 
string connectResponse = ReadResponse(responseStream);
Console.WriteLine("server connect response :  " + connectResponse);
向主机发送
CONNECT
请求(google.com)

respone一定是这样的

HTTP/1.1 200 Connection Established
StartTime: 22:42:38.774
Connection: close
但是
responseStream
不返回任何内容。当我使用Fiddler作为代理时

var client = new TcpClient("127.0.0.1", 8888);
它工作正常,并返回
200
响应。提琴手把它修好了吗

我使用windows 8.1,并使用.Net 2和4.5.1进行测试。

基于代理存在时使用的连接方法

因为TLS尤其需要端到端连接来提供 验证和防止中间人攻击,此备忘录 指定用于跨代理建立隧道的连接方法

如果是直接通信:

var client = new TcpClient("127.0.0.1", 8888);//url, 443);//
client.SendTimeout = 30000;
Stream responseStream = client.GetStream();

// Wrap in SSL stream
SslStream sslStream = new SslStream(responseStream);
sslStream.AuthenticateAsClient(url);

byte[] byts = Encoding.ASCII.GetBytes("GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: keep-alive\r\n\r\n");
sslStream.Write(byts, 0, byts.Length);

var str = ReadResponse(sslStream);
var client = new TcpClient("127.0.0.1", 8888);//url, 443);//
client.SendTimeout = 30000;
Stream responseStream = client.GetStream();

// Wrap in SSL stream
SslStream sslStream = new SslStream(responseStream);
sslStream.AuthenticateAsClient(url);

byte[] byts = Encoding.ASCII.GetBytes("GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: keep-alive\r\n\r\n");
sslStream.Write(byts, 0, byts.Length);

var str = ReadResponse(sslStream);