python的方便请求模块requests

python 下有一个非常好的request模块,使用它可以很方便的发送一些网络请求。不过这个模块不是python自带的,需要自己手动去下载,然后安装后才可以使用,那么, 首先第一步就是要去安装

该模块的官方网站:

http://www.python-requests.org

里面提供了一些介绍,下载地址和一些简单的使用说明

下载介绍在这里:

http://cn.python-requests.org/en/latest/user/install.html#install

根据上面的介绍, 如果你是Windows系统, 只需要下载zip的安装包就可以了

windows下的安装包:https://github.com/kennethreitz/requests/zipball/master

把压缩包下回来之后,你会得到一个zip文件, 可以把这个zip解压到你的python目录

然后打开cmd, cd到你的压缩包目录, 执行python setup.py install

黑色界面内容执行完毕后, 回到python ide界面

import requests

如果这个时候没有提示任何信息, 就说明该模块已经安装成功了

dir(requests)

可以看到一些封装好的方法

安装好了之后, 我们就可以先发送一个get请求试试

import requests
r = requests.get('http://w.qq.com')

这样就向w.qq.com,发送了一个get请求,如果要读回请求结果/服务器响应的内容

r.text

就返回了get的网页内容/服务器响应结果

它还支持post和其他请求类型,类似的有

put
delete
head
options

使用方法都和get一样。

当然,我们也可以给请求带上参数, requests允许使用params定义参数,它是以字典(key:value)形式来提供的

比如

>>> import requests
>>> payload = {'testkey':'testvalues'}
>>> x = requests.get('http://www.baidu.com')
>>> x.url
'http://www.baidu.com/'
>>> x = requests.get('http://www.baidu.com',params=payload)
>>> x.url
'http://www.baidu.com/?testkey=testvalues'
>>>

这玩意我感觉还有一个好处,就是,如果sql注入遇到极端条件的情况,还可以拿它当sqlmap用, 自定义一个head之类的。

也可以以字节的形式获取服务器响应的内容, 这个时候获取到的是二进制文本

>>> import requests
>>> r = requests.get('http://w.qq.com')
>>> r.content

request里也存在一个json数据的解码器

r.json()

即可获取格式化json信息。

如果需要读取原始响应信息, 可以这样

>>> import requests
>>> x = requests.get('http://w.qq.com',stream=True)
>>> x.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x00000000037EB860>
>>> x.raw.read()

自定义请求头

>>> import requests
>>> import json
>>> url = 'http://w.qq.com'
>>> payload = {'some':'data'}
>>> headers = {'content-type':'application/json'}
>>> r = requests.post(url,data=json.dumps(payload),headers=headers)

有时候, 把头文件改成一些蜘蛛的头, 可以绕过一些防火墙的策略

也可以使用requests进行表单提交, 这个时候用到的参数是data,data参数接收到的内容会被自动编码成表单形式

表单的格式为:

r = requests.post("url", data=payload)

查看服务器的响应头

>>> import requests
>>> x = requests.get('http://w.qq.com')
>>> x.headers
{'transfer-encoding': 'chunked', 'content-encoding': 'gzip', 'content-type': 'text/html; charset=utf-8', 'connection': 'close', 'date': 'Sun, 14 Jun 2015 10:03:50 GMT', 'server': 'tws', 'vary': 'Accept-Encoding'}
>>>

也可以使用cookies参数把cookie发送到服务器

格式为

cookies = dict(cookieskey=cookiesvalue)

x = reuqests.get(url,cookies=cookies)

也可以设置一个timeout, 告知连接多少时间后停止响应

参数就为timeout

其他的方法还有很多, 可以网上一搜便是, 或者去官网,其实现在python3的urllib.request做的已经很成熟了, 大牛完全没必要用这个,另外, 导入公共python模块的时候一定要注意到官网下载, 非官网, 如果python代码内包含恶意攻击载荷,你导入它的代码有可能在你本机运行木马, 所以一定要检查清楚。。 或者干脆直接去官网下载, 其实官网也不保险, 但好总比非官网安全系数要高一些,所以最好还是去官网。