早上好 我C#程序员,我有一个问题CONNECT HTTP方法
我试图打开插座得到一个HTTP连接,并读取网页的字节 流和所有是正确的, 例如,通过一个C#的Socket得到谷歌的主页, 我遵循的步骤是:
1.Opening流,并连接到Google服务器:
Socket skt = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
skt.Connect("www.google.com", 80);
2.preparing请求,并把它以字节数组:
string hdrs = "GET/HTTP/1.1\r\n"
+ "Host: www.google.com\r\n\r\n";
byte[] req_as_bytes = Encoding.UTF8.GetBytes(hdrs);
3.Sending HTTP请求:
skt.Send(req_as_bytes);
4.Receiving响应:
byte[] data = new byte[1024 * 200]; // 200 kilo bytes
int t = skt.Receive(data);
Console.WriteLine(Encoding.UTF8.GetString(data,0,t));
但是当我改变http方法从[GET]到[CONNECT], 的回应将是空的!
string hdrs = "CONNECT www.google.com:443 HTTP/1.1\r\n"
+ "Host: www.google.com:443\r\n"
+ "Proxy-Connection: keep-alive\r\n\r\n";
任何一个可以帮助我:或无数据从服务器 新的请求被接收?
的完整代码:
static void Main(string[] args)
{
Socket skt = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
skt.Connect("www.google.com", 443);
string hdrs = "CONNECT www.google.com:443 HTTP/1.1\r\n"
+ "Host: www.google.com:443\r\n"
+ "Proxy-Connection: keep-alive\r\n\r\n";
byte[] req_as_bytes = Encoding.UTF8.GetBytes(hdrs);
skt.Send(req_as_bytes);
byte[] data = new byte[1024 * 200]; // 200 kilo bytes
int t = skt.Receive(data);
Trace.WriteLine(Encoding.UTF8.GetString(data, 0, t);
skt.Shutdown(SocketShutdown.Both);
skt.Close();
}
谢谢... Mhamad
你知道'CONNECT'的作用吗?你知道下一步该做什么或期待吗?当您尝试学习套接字时,HTTP并不是最容易学习的协议。 – CodeCaster
你期望'CONNECT'会做什么?您为什么认为它适用于google.com? – svick
它适用于任何网站支持https, – MhdAboAhmad