Socket实现HTTP客户端

来源:互联网 发布:淘宝怎么申请客服介入 编辑:程序博客网 时间:2024/05/18 16:16

    前些日子用 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 就必须有编码识别了。这部分还没实现。没找到好的解决办法。

 

 

 

注:上面的内容用易语言实现。需要源码可以联系我.