使用代理http請求頭的變化

winsock實現HTTP代理提交HTTP請求的方法有兩種

1、直接請求
2、先連通遠程服務器後就相普通提交請求一樣提交HTTP請求

說一下第一種方法:


先說一下我們普通的提交HTTP請求的過程:
直接連接遠程服務器後,當連接成功時向服務器提交HTTP頭,注意看看大概的格式
GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.baidu.com
Connection: Keep-Alive


再看看使用代理的連接方法
先連接代理服務器(IP地址、端口),然後向代理服務器提交這樣的HTTP頭
GET http://www.baidu.com/ HTTP/1.0
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.baidu.com
Proxy-ConnectionKeep-Alive


區別
就這麼一點,
1、連接的不是目標服務器的IP地址和端口而是代理服務器IP地址和端口
2、提交的不是相對的地址而是絕對的HTTP地址
3、Connection: Keep-Alive 和 Proxy-ConnectionKeep-Alive 的區別

再說說第二種方法:

其實這種方法很強大,他除了可以實現HTTP協議的代理,還可以實現其他TCP/IP協議的處理。
如:POP2、SMTP、FTP等等
先看看理論把,其實就是客戶端連接代理服務器後,讓代理服務器去連接遠程服務器,當代理服務器連接好遠程服務器
成功後,會返回連接結果給客戶端,這時客戶端判斷結果,如果連接成功了就直接發送正常的數據給代理,代理收到數據
後立刻轉發給服務器,其實就是個中轉站。就是開始連接的時候不同,後面所有的通訊可以照常操作

客戶端先連接代理服務器,然後向代理服務器提交請求,告訴他要連接到哪:
CONNECT www.baidu.com:80 HTTP/1.1
Accept: */*
Content-Type: text/html
Proxy-ConnectionKeep-Alive
Content-length: 0

這時,如果代理服務器連接成功會返回這樣一段信息(客戶端收到的信息,注意,不要這個時候斷開連接喲,呵呵)
HTTP/1.0 200 Connection established
Proxy-agent: CCProxy 6.4.2    '這裏是代理程序的名稱,看你的是什麼代理軟件


這時你就可以發出正常的請求了
GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.baidu.com
Connection: Keep-Alive

然後就可以收到遠程服務器發過來的網頁信息了

如何判斷返回的消息接收完了呢?有時候消息會分成幾段來返回

這個要看協議的,如果是HTTP協議,可以有兩種方式判斷。
1、通過Content-length的值判斷要接收的數據大小,數據夠了就斷開連接,注意,HTTP頭的數據大小不算。
2、在HTTP換上Connection: Close,由服務器發送完服務器自動斷開,不用你去判斷什麼時候該斷開
  你就管收數據,收到Close事件時斷開連接就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章