官方文档
本文主要基于官方的文档 | > The User Guide
| | —- |
通过这个库,我们可以实现包括
GET
等在内的所有 HTTP 请求。发送请求
正常情况下,我们使用
get
去请求网页,需要发送参数时,都是通过url/path?key=value
的形式,但 requests 库允许我们将 params 以一个string
的dictionary
作为get()
的一个参数,即 url 与 params 可以分离,并在函数内部自动实现组合。payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('https://httpbin.org/get', params=payload)
r = requests.get('https://httpbin.org/get?key1=value1&key2=value2')
# 上面两行效果上等价,但实际上 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
。
类似之前提到过的将 params 以dictionary
的形式传入get()
的方式,我们也可以将 headers 以dictionary
的形式传入请求方法,但需要注意,具体信息的优先级比 headers 高,具体参考这里
和 headers 一样,POST 的数据部分也可以用同样的方法作为参数传入post()
,但对于 POST 的 data,我们还可以使用list
和tuples
- 未完待续