Socket實現HTTP客戶端

2021-04-30 10:49:29 字數 859 閱讀 4271

前些日子用 wininet做專案。功能忒強大了。但總覺得管理cookie有點不方便。即使設定了自己手動管理cookies。這天上掉餡餅的事還真的常常發生。比如你之前用瀏覽器訪問了這個站,留下了cookie 你再用wininet訪問的時候,這個餡餅就出現了。

封包不難 連線後。將 headers一股腦堆進去。2個換行符後就是資料了(post才有)。

伺服器返回的資料,怎麼知道長度呢?我們知道的有content-length頭。但抓包發現。有些靜態檔案是沒有的。它的這個長度儲存在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 而且網域名稱和埠沒變的情況下。沒必要重新連線。

資料報的處理搞定了後。就是一些介面的封裝了。在這裡需要注意一些細節是。所有協議頭不的單詞的第乙個字母是大寫的。封裝的時候沒注意,走了不少彎路。

到這裡已經基本滿足我的專案需求了。用它做個qq帳號註冊器。速度飛快。也不會出現「非法訪問」了。爽!

最後乙個問題是編碼識別和處理了。如果是 text 就必須有編碼識別了。這部分還沒實現。沒找到好的解決辦法。

注:上面的內容用易語言實現。需要原始碼可以聯絡我.

用Socket類實現HTTP協議客戶端應用

用socket類實現http協議客戶端應用 梁穎健 liangyingjian 21cn.com responsecode integer.parseint message.substring mark 1,mark 4 responsemessage message.substring mark,...

用Socket類實現HTTP協議客戶端應用

用socket類實現http協議客戶端應用 梁穎健 liangyingjian 21cn.com responsecode integer.parseint message.substring mark 1,mark 4 responsemessage message.substring mark,...

用Socket類實現HTTP協議客戶端應用

用socket類實現http協議客戶端應用 梁穎健 liangyingjian 21cn.com responsecode integer.parseint message.substring mark 1,mark 4 responsemessage message.substring mark,...