您的位置:首页 > 其它

爬虫技术要点(一)Post相关问题

2015-07-04 22:10 323 查看
本人有空有玩爬虫,虽然技术不行,没有拿得出手的作品,但还是喜欢玩,这几天就遇到一个非常奇怪的问题,无法理解的现象.

在Eclipse中运行程序,流程一帆风顺地走下去,但在命令行中(CMD)运行,使用 java class类的方式运行,且流程在form表单提交时,响应始终会超时,而且在两个网站中使用都这样,我就纳闷了,怎么每次我一输入验证码,怎么都登陆不进去呢?不会是服务器的问题.现在终于想解决了.

打开WireShark,看看这个提交用的Post协议到底发出去没有,答案当然是没有啦,至少在Http协议中找不到,那就看看Tcp协议吧,呃,有啊,怎么WireShark没有把它当作Http协议呢?肯定是协议出问题了,笑话,Eclipse和cmd运行用的都是同样的代码,怎么可能是协议出问题.

仔细比较这条Post协议的Http(Eclipse运行时获取)版和Tcp(cmd运行获取)版的数据,发现了这样的差别:

http版的结尾是\r\n\r\n,tcp版的结尾是要post的数据结尾,绕过了\r\n\r\n,本来该在\r\n\r\n这里截断的,为什么没有?

再往后来,post数据也不一样啊,同样的表单,为什么post数据不一样?

嘿嘿,因为中文编码的原因:

表单里有个input提交按钮项,value值是中文,Elipse运行我用的UTF-8编码,CMD中默认是GBK编码,所以cmd运行时这个数据发送的是乱码,可能这是这样把http协议打乱了.

其实这样表单项是用不上的,直接去掉后,欧啦!哈哈,不到10分钟.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: