Requests库整理(基本用法)

导入

import requests

简单GET POST等HTTP请求

r = requests.get('https://github.com/timeline.json')
r = requests.post("http://httpbin.org/post")
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")

传入参数

用params构建URL参数(例如httpbin.org/get?key=val)
需要字符串字典,值为None的键不会被传入,字典的值也可以是列表

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)

响应内容

r = requests.get('https://github.com/timeline.json')

r.text 自动解码出响应内容
改变r.encoding可以让r.text用指定的解码方式解码
r.content以字节(二进制)的方式访问响应内容(未解码)
r.json()内置json解码器,解码失败时抛出异常

注意:r.json()成功时并不代表响应成功,需要使用r.raise_for_status()或检查r.status_code

定制请求头

传一个字典给header参数

url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)

Requests 不会基于定制 header 的具体情况改变自己的行为。只不过在最后的请求中,所有的 header 信息都会被传递进去

注意: 所有的 header 值必须是 string、bytestring 或者 unicode。尽管传递 unicode header 也是允许的,但不建议这样做。

复杂POST请求

模拟表单形式POST数据,传递一个字典给 data 参数

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)

也可以穿入一个元祖,在表单中多个元素使用同一 key 的时候这种方式尤其有效

payload = (('key1', 'value1'), ('key1', 'value2'))
r = requests.post('http://httpbin.org/post', data=payload)

如果不想以表单形式,可以直接给data穿一个string(json)

import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))

也可以直接传给json 参数,不用自己dump,会自动编码

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, json=payload)

响应状态码

r = requests.get('http://httpbin.org/get')
r.status_code

如果返回4XX 或者 5XX,可以用r.raise_for_status()抛出异常(若是200,则返回None)

响应头

r.headers
以字典方法访问某部分(大小写不敏感)
r.headers['Content-Type']
r.headers.get('content-type')

Cookie

取得响应中的cookie

url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)
r.cookies['example_cookie_name']

发送cookie,使用cookie参数

url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)

Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但界面更为完整,
适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:

jar = requests.cookies.RequestsCookieJar()
jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
url = 'http://httpbin.org/cookies'
r = requests.get(url, cookies=jar)

重定向与请求历史

r.history查看请求历史(重定向过程等)
allow_redirects参数开启/禁用重定向
r = requests.get('http://github.com', allow_redirects=False)

超时

timeout设定超时秒数
requests.get('http://github.com', timeout=0.001)

注意timeout是响应时间

你可能感兴趣的:(Requests库整理(基本用法))