winsock和inet控件解决http协议数据包无法发送cookie

2011年1月21日 发表评论 阅读评论

文章是网上转载的,其实winsock也可以解决,而且远不必像作者说的那样复杂,只要在报头中将Accept-Encoding: gzip, deflate这句去掉就行了,返回数据就文本模式了。当然,使用inet控件将是最简单的解决方案,建议新手使用。

本文主要讲解用winsock控件和Inet控件发送http请求信息。核心是对cookie的处理和操作。

http协议,自己组建http协议的数据包,然后用winsock将这个http数据包发送出去。其中包括GET方式和POST方式。要注意的是在请求字段里面如果有

Accept-Encoding: gzip, deflate

这句是一个要求服务器压缩数据的字段,如果加上这句,那么返回的数据中除了头以外的其它数据是经过压缩的(压缩格式未知,我曾经把数据保存成zip文件然后用winrar打开,但是失败)

winsock发送http数据包遇到了问题——cookie。无法解析cookie。cookie的格式很奇怪。好像是变量名和变量值以及到期时间的分割不是很明显。而且我也没有找到合适的说明文档,所以我无法设置cookie。而无法设置cookie就无法维持一个http的登录状态。郁闷……

山穷水尽疑无路,柳暗花明又一村。正当winsock控件无能为力的时候,又将注意力转移到了另一个控件上——inet控件又名Internet Transfer Contor控件。这个控件可以自动设置cookie,只要把要发送的主体数据赋值给execute方法。就可以直接发送,而所有的http头是inet 控件自己生成的,当然也包括cookie头。这样问题就迎刃而解了。

比如说,想要登录一个网站,例如本站www.ibiancheng.cn,就分析这个网站的登录表单,直接将表单里的元素以a=1&b=2的格式做POST提交。之后所以得cookie(包括session,因为 session就是用临时cookie保存的)就已经都设置好了。你可以再用GET方式取得一个网页的html代码看看。这个html应该就是已登录的了。

还有一些其它的问题,比如https协议等。这里就不说了。

总之,winsock控件和inet控件各有千秋,而我还是对winsock控件熟,因为以前用过很多。


转载请注明来自:[闪电博客]http://shandian.biz/178.html

分类: 电脑知识 标签:
  1. 本文目前尚无任何评论.