requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。可以说,Requests 完全满足如今网络的需求
本文全部来源于官方文档 http://docs.python-requests.org/en/master/
安装方式一般采用$ pip install requests。其它安装方式参考官方文档
HTTP - requests
import requests
GET请求
r = requests.get(‘http://httpbin.org/get‘)
传参
payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’, ‘key3’: None}
r = requests.get(‘http://httpbin.org/get‘, params=payload)
http://httpbin.org/get?key2=value2&key1=value1
Note that any dictionary key whose value is None will not be added to the URL’s query string.
参数也可以传递列表
payload = {‘key1’: ‘value1’, ‘key2’: [‘value2’, ‘value3’]}
r = requests.get(‘http://httpbin.org/get‘, params=payload)
print(r.url)
http://httpbin.org/get?key1=value1&key2=value2&key2=value3
r.text 返回headers中的编码解析的结果,可以通过r.encoding = ‘gbk’来变更解码方式
r.content返回二进制结果
r.json()返回JSON格式,可能抛出异常
r.status_code
r.raw返回原始socket respons,需要加参数stream=True
r = requests.get(‘https://api.github.com/events‘, stream=True)
r.raw
‘{“cookies”: {“sessioncookie”: “123456789”}}’
session可以用来提供默认数据,函数参数级别的数据会和session级别的数据合并,如果key重复,函数参数级别的数据将覆盖session级别的数据。如果想取消session的某个参数,可以在传递一个相同key,value为None的dict
s = requests.Session()
s.auth = (‘user’, ‘pass’) #权限认证
s.headers.update({‘x-test’: ‘true’})
both ‘x-test’ and ‘x-test2’ are sent
s.get(‘http://httpbin.org/headers‘, headers={‘x-test2’: ‘true’})
函数参数中的数据只会使用一次,并不会保存到session中
如:cookies仅本次有效
r = s.get(‘http://httpbin.org/cookies‘, cookies={‘from-my’: ‘browser’})
session也可以自动关闭
with requests.Session() as s:
s.get(‘http://httpbin.org/cookies/set/sessioncookie/123456789‘)
响应结果不仅包含响应的全部信息,也包含请求信息
r = requests.get(‘http://en.wikipedia.org/wiki/Monty_Python‘)
r.headers
r.request.headers
SSL证书验证
Requests可以为HTTPS请求验证SSL证书,就像web浏览器一样。要想检查某个主机的SSL证书,你可以使用 verify 参数:
requests.get(‘https://kennethreitz.com‘, verify=True)
requests.exceptions.SSLError: hostname ‘kennethreitz.com’ doesn’t match either of ‘*.herokuapp.com’, ‘herokuapp.com’
在该域名上我没有设置SSL,所以失败了。但Github设置了SSL:
requests.get(‘https://github.com‘, verify=True)