早上好 我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