适合级别:入门,中级python
关键字 :python, http, GET, POST, 安全, 模拟, 浏览器, 验证码,图片识别, google 程序员
1 此文不是关于黑客或安全话题的!数据库
2 使用脚本程序发送GET或POST,这是最简单也是最多见最频繁的事情之一;那为何我还要YY一遍呢? 由于不仅是熟能生巧,熟还能生出好多东西来呢,就看是和谁生!浏览器
3 我想有必要再次温习一遍HTTP协议及GET/POST请求相应内容与格式等基础知识的;不过我不会在此简述,但愿你去看看那些诸如“当你使用浏览器打开一个URL,究竟发生了哪些事”这样的文章吧!安全
4 python发送GET/POST可能涉及的lib: urllib, urllib2, cookielib ;至于其余的诸如处理HTML等不在本话题范围内:)cookie
5 请求google.com的首页:curl
以上是hello world级别了;但geek程序员每每会经过此发现,打印出的东西,因URL而异 --- 废话,固然不是说内容,是指风格!!! 优秀的站点,其源码每每也在各个方面高一个水准,包括unicode编码、安全、性能等等方面。工具
下载GOOGLE的LOGO文件性能
6 模拟浏览器打开某个登陆URL,并经过POST成功登陆:ui
(1 这个问题的状况比较特殊,因此我打算写一个稍微全面点的,以尽量涵盖常见状况,包括但不限于:cookies ,密码加密发送,https,简单验证码,ip限制,充分伪装浏览器等等。
(2 POST请求发送的最小形式:
(3 一些注意事项或最佳实践:
A 是否由于cookie的问题而POST失败,最好使用真的浏览器登陆,而后使用firebug这样的调试工具来查看实际的请求与响应头信息,以及cookie数据!
B 除了cookie以外,还有不少其余方法来达到一些安全或其余目的;cookie能保存的数据就4k,并且对客户端彻底开放。
C 其实第一件重要的事情是阅读源码,肉眼解析出form及其action和参数等;搞清楚逻辑,再去模拟;但这一步每每是最开始的斗智斗勇阶段;有些程序员 老是使用小把戏来调戏你,好比追加无心义参数,追加随机数并命名为看上去像业务数据的变量等,还有人喜欢玩数学,好比搞质数运算等。
D 验证码问题:分不少种,有的程序员比较嫩,因此你能够分析下绕过;而通常的安全验证码,则须要你本身多请求一些验证码回来建库,作特征识别;至于很变态的验证码,建议你放弃这个思路,不要非去识别不可!
E 网上流传的discuz!模拟登陆,其实都大可能是理论;真正的程序都在那些专业发帖公司那里。
F 我原本想贴一个真实的代码出来,可是担忧和谐问题,因此仍是做罢!
7 熟练地掌握这些东西能够作什么?
答:这只是一种方式和途径,或者说一种小伎俩;作什么是你本身的事哦,能作什么就是方法自己的事了!!!低调地说,我用这个干过:刷票(投票的,刷 人气的,耍点击率的,抽奖的...);突破限制彻底下载整站数据(区别于爬虫哦);专业数据库的数据COPY;其余不和谐的勾当。。。
8 其实只要你够geek,几乎能用curl搞定大多数问题。不过每每,咱们更应该将精力放在解决问题上,而不是解决问题的工具上!
2011-6-7 更新
关于验证码的问题:
1 有不少不少的人都想搞这个验证码,好比想破解,好比想写机器人,等等
2 验证码的问题我以为就两张思路: 绕过,识别; 其中绕过的条件是机制自己有漏洞,识别又分自动识别和人工识别
3 不是全部场合都必定须要破解验证码才能继续,好比有的时候只须要人工识别便可: 一个半自动化的机器人,在须要填写验证码时,把验证码图片给出(甚至能够发送到email或者手机上),人工识别并返回,机器人提交并继续工做 - 这是很理想也很底代价的方式之一 。
固然,若是你非要破解验证码不可,那就搞特征库并比对识别喽。具体思路也很简单,并且我的建议不要重头来写,用开源的便可:
1 大量读取验证码图片,创建原始数据库;
2 分析并提取特征,好比有的验证码图片很简单,就几个数字而已,你抓2W个图片拿下来分析一下,基本八九不离十了,均可以识别出;
3 程序里遇到验证码的时候,拿图片去特征数据库比对,获得结果。
4 主意事项:好比图片中字符的分隔,好比容错,好比干扰因素的排除,好比对于相似google验证码的那种扭曲等变换,就要麻烦了。。。