官方文档

  • 本文主要基于官方的文档 | > The User Guide

    | | —- |

  • 通过这个库,我们可以实现包括GET等在内的所有 HTTP 请求。

    发送请求

    正常情况下,我们使用get去请求网页,需要发送参数时,都是通过url/path?key=value的形式,但 requests 库允许我们将 params 以一个stringdictionary作为get()的一个参数,即 url 与 params 可以分离,并在函数内部自动实现组合。

    1. payload = {'key1': 'value1', 'key2': 'value2'}
    2. r = requests.get('https://httpbin.org/get', params=payload)
    3. r = requests.get('https://httpbin.org/get?key1=value1&key2=value2')
    4. # 上面两行效果上等价,但实际上 params 的排列顺序由实现机制决定

    处理请求

    而请求得到的这个r,是一个 response object,从中我们能得到我们想要的数据。
    通过r.text我们能得到文本形式的 response 内容。
    而且令人幸喜的是,官方文档中指出:

    Requests will automatically decode content from the server. Most unicode charsets are seamlessly decoded. When you make a request, Requests makes educated guesses about the encoding of the response based on the HTTP headers.

我们可以通过r.encoding来获取当前采用的编码,也可以通过r.encoding = "xxx"来灵活地改变编码。

而通过r.content我们可以按字节访问响应内容,获取二进制数据(例如图像)
具体内容可以查看这一块

通过r.json()可以获得 JSON 格式的内容。但是在某些情况下,该操作会抛出异常。同时,反过来,即使能获取 JSON 数据,也并不意味着请求成功了,因为某些网站在请求失败时也可能发送 JSON 数据,而被 requests 解析。因而要记得检查r.status_code

Raw Response Content

类似之前提到过的将 params 以dictionary的形式传入get()的方式,我们也可以将 headers 以dictionary的形式传入请求方法,但需要注意,具体信息的优先级比 headers 高,具体参考这里

和 headers 一样,POST 的数据部分也可以用同样的方法作为参数传入post(),但对于 POST 的 data,我们还可以使用listtuples

  • 未完待续