`
bluky999
  • 浏览: 720274 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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的首页:

 

 

>>> import urllib2
>>> print urllib2.urlopen('http://google.com').read()

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

 

 

下载GOOGLE的LOGO文件

 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请求发送的最小形式:

 

>>> import urllib
>>> import urllib2
>>> import cookielib

>>> cj = cookielib.CookieJar()
>>> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
>>> opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')]
>>> urllib2.install_opener(opener)
>>> req = urllib2.Request("http://xxoo.com",urllib.urlencode({"username":"root","password":"ROOTXXOO"}))
>>> req.add_header("Referer","http://xxoo.com")
>>> resp = urllib2.urlopen(req)
>>> 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验证码的那种扭曲等变换,就要麻烦了。。。

 

3
0
分享到:
评论
2 楼 bluky999 2014-09-12  
转:
Python 标准库 urllib2 的使用细节

http://www.cnblogs.com/yuxc/archive/2011/08/01/2123995.html 
1 楼 ipython 2011-03-30  
不过往往,我们更应该将精力放在解决问题上,而不是解决问题的工具上!
   
其实用chrome内置的功能也可以很方便地查看cookie和get,post 的http文件头。

相关推荐

    python做get和post请求

    在Python编程中,进行HTTP请求是常见的任务,主要用于与Web服务器交互,获取或发送数据。在给定的标题和描述中,“python做get和post请求”指的就是如何使用Python实现HTTP的GET和POST方法。这两种方法是HTTP协议中...

    使用python 2.7来编写post请求接口 。

    1.安装对应的库 2.将test_http_copy.py代码复制到自己的服务器或电脑上 3.python test_http_copy.py启动或(ohup python -u test_http_copy.py > test.log 2>&1 & 后台启动) 4.使用postman调用自测。

    Python实现简单的HTTP服务器(GET/POST)

    本文将深入探讨如何使用Python实现一个简单的HTTP服务器,支持GET和POST请求。通过理解这个过程,你可以更好地理解网络通信的基本原理,以及Python在网络编程中的应用。 首先,让我们了解HTTP(超文本传输协议)的...

    Python批量发送post请求的实现代码

    2. 批量发送POST请求:文档介绍了如何在Python中实现批量发送POST请求的功能。在真实场景中,这种需求可能出现在需要自动化测试、数据采集、接口调用等多个场景。文档提供了Java和Python两种语言的实现代码,对初学...

    libcurl往python简单服务器发送post请求json文件

    在这个场景中,我们关注的是如何使用libcurl库(一个强大的URL传输库)在C++中向一个用Python编写的简单服务器发送POST请求,同时携带JSON数据。让我们深入探讨这个过程中的关键知识点。 首先,我们要了解Python的...

    Python 访问http, https请求

    - `requests.post()`:用于发送POST请求,可以发送JSON、表单或其他类型的数据。 - `requests.Session`:创建一个会话对象,可以保持cookies和连接池,提高性能。 HTTP和HTTPS的主要区别在于安全性。HTTP是明文...

    Python使用requests发送POST请求实例代码

    本文研究的主要是Python使用requests发送POST请求的相关内容,具体介绍如下。 一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样: 请求行 请求报头 消息主体 HTTP协议规定post提交的...

    Python使用grequests(gevent+requests)并发发送请求过程解析

    9. 异常处理:在并发发送请求时,可能会遇到各种异常情况,如URL无法访问或请求超时。grequests允许通过自定义异常处理函数来应对这些情况。例如,在发送请求列表时,可以指定一个异常处理函数,当某个请求发生异常...

    模仿发送Http的Get、Post请求

    - 在浏览器中直接输入URL即可发送GET请求,也可以通过编程语言(如Python的requests库,JavaScript的fetch或XMLHttpRequest对象)来实现。 2. POST请求: - POST请求将数据封装在请求体中发送,适用于传递复杂或...

    python爬虫实现POST request payload形式的请求

    总之,理解`request payload`与`form data`的区别,并能用Python的`requests`库正确构造和发送POST请求,是Python爬虫开发中不可或缺的技能。在实际应用中,我们应根据目标网站的具体需求来选择合适的数据格式和方法...

    python爬虫请求—post

    在Python中,`requests`库是进行HTTP请求的首选工具,它提供了简单易用的接口来发送GET、POST等不同类型的HTTP请求。本篇文章将详细探讨如何使用Python的`requests`库进行POST请求,模拟浏览器登录。 首先,我们...

    基于Python模拟浏览器发送http请求

    /usr/bin/env python # -*- coding=utf-8 -*- import urllib2 url="https://www.baidu.com" req_header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271...

    python中get和post有什么区别

    在Python编程中,GET和POST是HTTP协议中最常用的两种请求方法,它们主要在发送数据到服务器时有不同的行为和用途。 1. 数据传输位置: - GET:数据通过URL(Uniform Resource Locator)作为查询字符串附加在URL...

    Python中get、post请求详解(HTTP请求头、状态码)

    我们知道通常浏览器支持get与post两种常见的请求方式,那么在python当中如何具体实现呢? GET 首先是get,我们知道get指令比较简单,通常便是在浏览器窗口地址栏中使用?xx=xxxxx 那么在python当中如何实现这个过程呢...

    python通过get,post方式发送http请求和接收http响应的方法

    本文实例讲述了python通过get,post方式发送http请求和接收http响应的方法。分享给大家供大家参考。具体如下: 测试用CGI,名字为test.py,放在apache的cgi-bin目录下: #!/usr/bin/python import cgi def main(): ...

    python网络请求程序

    总的来说,这个"python网络请求程序"项目涵盖了Python网络编程的基础,包括使用`requests`库进行GET和POST请求,以及检查网站状态以判断其是否被攻击。这些知识在Web开发、爬虫和自动化测试等领域都有广泛应用。通过...

    POST方法发送payload形式的请求1

    在进行网络编程或网页爬虫工作时,我们经常会遇到向服务器发送POST请求的情况。POST请求通常用于提交数据,如登录信息、表单数据等。在处理某些特定的POST请求时,我们可能会遇到一种名为"request payload"的数据...

    Python常见四种Post请求数据1

    对于GET请求,数据通常包含在URL中,而POST请求则允许在请求主体中携带更复杂的数据。 1. **application/x-www-form-urlencoded**: 这是最常见的POST请求数据格式,也是表单提交的默认格式。在这种格式下,数据名...

    浅谈python3发送post请求参数为空的情况

    post请求的时候如果不带参数,其实作用就跟get请求一样。我们在做接口测试的时候,发现开发就全部使用的post,get的作用就被这样的post空参数请求给替代了。 在Python代码请求,如下: class HttpHelper(): def __...

    Python大数据之网络爬虫的post请求、get请求区别实例分析

    了解了GET和POST请求的区别后,我们可以根据实际需求选择合适的请求方式来编写Python网络爬虫。在爬取过程中,还需要注意处理各种可能的反爬策略,如验证码、IP限制等。同时,要遵守网站的robots.txt规则,尊重网站...

Global site tag (gtag.js) - Google Analytics