当前位置: 首页 > news >正文

python发送GET或POST请求以便干一些趣事

python发送GET或POST请求以便干一些趣事

适合级别:入门,中级

关键字   :python, http, GET, POST, 安全, 模拟, 浏览器, 验证码,图片识别, google 

 

1 此文不是关于黑客或安全话题的!

 

2 使用脚本程序发送GET或POST,这是最简单也是最常见最频繁的事情之一;那为什么我还要YY一遍呢? 因为不只是熟能生巧,熟还能生出好多东西来呢,就看是和谁生!

 

3 我想有必要再次温习一遍HTTP协议及GET/POST请求相应内容与格式等基础知识的;不过我不会在此简述,希望你去看看那些诸如“当你使用浏览器打开一个URL,究竟发生了哪些事”这样的文章吧!

 

4 python发送GET/POST可能涉及的lib:  urllib, urllib2, cookielib ;至于其他的诸如处理HTML等不在本话题范围内:)

 

 

5 请求google.com的首页:

 

 

Python代码   收藏代码
  1. >>> import urllib2  
  2. >>> print urllib2.urlopen('http://google.com').read()  

 以上是hello world级别了;但geek程序员往往会通过此发现,打印出的东西,因URL而异 --- 废话,当然不是说内容,是指风格!!!  优秀的站点,其源码往往也在各个方面高一个水准,包括unicode编码、安全、性能等等方面。

 

 

下载GOOGLE的LOGO文件

Python代码   收藏代码
  1. open('d:\\temp\\google-logo.gif','wb').write(urllib2.urlopen('http://www.google.com/images/logo_sm.gif').read())  
 

 

 

6 模拟浏览器打开某个登录URL,并通过POST成功登录:

(1 这个问题的情况比较特殊,所以我打算写一个稍微全面点的,以尽可能涵盖常见情况,包括但不限于:cookies ,密码加密发送,https,简单验证码,ip限制,充分假装浏览器等等。

 

(2 POST请求发送的最小形式:

 

Python代码   收藏代码
  1. >>> import urllib  
  2. >>> import urllib2  
  3. >>> import cookielib  
  4.   
  5. >>> cj = cookielib.CookieJar()  
  6. >>> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))  
  7. >>> opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')]  
  8. >>> urllib2.install_opener(opener)  
  9. >>> req = urllib2.Request("http://xxoo.com",urllib.urlencode({"username":"root","password":"ROOTXXOO"}))  
  10. >>> req.add_header("Referer","http://xxoo.com")  
  11. >>> resp = urllib2.urlopen(req)  
  12. >>> print resp.read()  
 

 

(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验证码的那种扭曲等变换,就要麻烦了。。。

 

相关文章:

  • SSH安全技巧
  • JSP过滤器防止Xss漏洞
  • XSS漏洞解决方案之一:过滤器
  • 五个你必须知道的javascript和web debug技术
  • 12 款最好的 Bootstrap 设计工具
  • 设置Jetty服务器的cookie为secure和httponly
  • XSS与HTTP-only Cookie 脚本获取JSESSIONID的方法
  • DNS 安全信息 (微软)
  • DNS安全 -月宫吴刚
  • ldap 身份验证的通用步骤
  • Openssl多个安全补丁简易分析危害及修复方案
  • Redhat Linux 安全设置脚本
  • nginx中shell脚本封锁采集IP地址
  • Apache和Tomcat限制文件访问或下载
  • Postgresql默认用户名与密码
  • #Java异常处理
  • 「面试题」如何实现一个圣杯布局?
  • 30天自制操作系统-2
  • golang中接口赋值与方法集
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • java取消线程实例
  • Java应用性能调优
  • python大佬养成计划----difflib模块
  • Redash本地开发环境搭建
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 关于List、List?、ListObject的区别
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 听说你叫Java(二)–Servlet请求
  • 正则表达式小结
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #define 用法
  • (C#)获取字符编码的类
  • (done) 两个矩阵 “相似” 是什么意思?
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)fiber的基本认识
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (黑马C++)L06 重载与继承
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • .CSS-hover 的解释
  • .dwp和.webpart的区别
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Core 版本不支持的问题
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NetCore 如何动态路由
  • .NET企业级应用架构设计系列之结尾篇