??? 前些日子用 Wininet做項目。功能忒強大了。但總覺得管理Cookie有點不方便。即使設置了自己手動管理Cookies。這天上掉餡餅的事還真的常常發(fā)生。比如你之前用瀏覽器訪問了這個站,留下了Cookie 你再用wininet訪問的時候,這個餡餅就出現(xiàn)了。
?
?? 封包不難 連接后。將 Headers一股腦堆進去。2個換行符后就是數(shù)據(jù)了(POST才有)。
?
?? 服務器返回的數(shù)據(jù),怎么知道長度呢?我們知道的有Content-Length頭。但抓包發(fā)現(xiàn)。有些靜態(tài)文件是沒有的。它的這個長度保存在2個換行符之后。單獨的一行以十六進制文本的格式保存。
?
比如:
HTTP/1.1 200 OK
Date: Sat, 04 Jul 2009 17:41:10 GMT
Server: Apache
Pragma: no-cache
Connection: Keep-Alive
Content-Type: text/plain
?
?
2f8
......
這里紅色的2f8就是哦body的長度了。
?
控制連接行為的還有一個就是 Connection 頭 如果是 Keep-Alive,則一次請求完畢后不要斷開連接。我這里的做法是保存了上一次的域名和端口。如果上次請求有 Keep-Alive 而且域名和端口沒變的情況下。沒必要重新連接。
?
數(shù)據(jù)包的處理搞定了后。就是一些接口的封裝了。在這里需要注意一些細節(jié)是。所有協(xié)議頭不的單詞的第一個字母是大寫的。封裝的時候沒注意,走了不少彎路。
?
到這里已經基本滿足我的項目需求了。用它做個QQ帳號注冊器。速度飛快。也不會出現(xiàn)“非法訪問”了。爽!
?
最后一個問題是編碼識別和處理了。如果是 text 就必須有編碼識別了。這部分還沒實現(xiàn)。沒找到好的解決辦法。
?
?
?
注:上面的內容用易語言實現(xiàn)。需要源碼可以聯(lián)系我.