URL传参

对于带参数的URL,传入一个dict作为params参数:

  1. >>> r = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})
  2. >>> r.url # 实际请求的URL
  3. 'https://www.douban.com/search?q=python&cat=1001'

定制HTTP Header

需要传入HTTP Header时,可传入一个dict作为headers参数:

  1. >>> r = requests.get('https://www.douban.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
  2. >>> r.text
  3. '<!DOCTYPE html>\n<html>\n<head>\n<meta charset="UTF-8">\n <title>豆瓣(手机版)</title>...'

POST

要发送POST请求,只需要把get()方法变成post(),然后传入data参数作为POST请求的数据,我所传入的字典在发出请求时会自动编码为表单form形式。

  1. >>> payload = {'key1': 'value1', 'key2': 'value2'}
  2. >>> r = requests.post("http://httpbin.org/post", data=payload)
  3. >>> print(r.text)
  4. {
  5. ...
  6. "form": {
  7. "key2": "value2",
  8. "key1": "value1"
  9. },
  10. ...
  11. }

Timeout

要指定超时,传入以秒为单位timeout参数:

  1. # 2.5秒后超时
  2. >>> r = requests.get(url, timeout=2.5)

二进制响应

对于非文本请求可以以二进制byte的方式访问请求响应体:(通常content用于提取图片、文件)

  1. r.content.decode('utf-8') # 通常相当于r.text

以请求返回的二进制数据创建一张图片,可以使用如下代码:

  1. >>> from PIL import Image
  2. >>> from io import BytesIO
  3. >>> i = Image.open(BytesIO(r.content))