reuqest API
request API
模块
- *requests.request(method, url, *kwargs)
- *requests.get(url, params=None, *kwargs)
- *requests.options(url, *kwargs)
- *requests.head(url, *kwargs)
- *requests.post(url, data=None, json=None, *kwargs)
- *requests.put(url, data=None, *kwargs)
- *requests.patch(url, data=None, *kwargs)
- *requests.delete(url, *kwargs)
除了 requests.request() 外,其余 7 个方法与 http 协议中的请求方法一一对应。这 7 个方法其实都是在调用 requests.request() 方法
| method | 简述 |
|---|---|
| url | 请求的 url |
| params | 请求携带的 params |
| data | 请求 body 中的 data |
| json | 请求 body 中的 json 格式的 data |
| headers | 请求携带的 headers |
| cookies | 请求携带的 cookies |
| files | 上传文件时使用 |
| auth | 身份认证时使用 |
| timeout | 设置请求的超时时间,可以设置连接超时和读取超时 |
| allow_redirects | 是否允许重定向,默认 True,即允许重定向 |
| proxies | 设置请求的代理,支持 http 代理以及 socks 代理(需要安装第三方库 “pip install requests[socks]") |
| verify | 用于 https 请求时的 ssl 证书验证,默认是开启的,如果不需要则设置为 False 即可 |
| stream | 是否立即下载响应内容,默认是 False,即立即下载响应内容 |
| cert | 用于指定本地文件用作客户端证书 |
基本调用
| |
返回 Response 对象
params
接受一个字典,用于传递 URL 参数
| |
输出
| |
headers
接受一个字典,用于传递 header 参数(请求头)
| |
data
用于 POST 请求中,传递请求体中的 data 参数
该网站可以判断如果请求是 POST 方式,就把相关请求信息返回
| |
输出
| |
json
用于 POST 请求中,传递请求体中 json 格式的的 data 参数
files
上传文件
| |
cookies
用于传递 cookies 参数,不过将 cookies 写在 headers 中比较方便
| |
输出
| |
步骤
- 调用 cookies 属性,得到 Cookies,可以发现它是 RequestCookieJar 类型
- 用 items()方法将其转化为元组组成的列表,遍历输出每一个 Cookie 的名称和值,实现 Cookie 的遍历解析
verify
用于 https 请求时的 ssl 证书验证,默认是开启的,如果不需要则设置为 False 即可
例:请求一个 HTTPS 站点,但是证书验证错误的页面时,把 verify 参数设置为 False
| |
输出
| |
报了一个警告,它建议我们给它指定证书
- 可以通过设置忽略警告的方式来屏蔽这个警告
| |
- 或者通过捕获警告到日志的方式忽略警告
| |
- 可以指定一个本地证书用作客户端证书
| |
我们需要有 crt 和 key 文件,并且指定它们的路径。注意,本地私有证书的 key 必须是解密状态,加密状态的 key 是不支持的
proxies
设置请求的代理,支持 http 代理以及 socks 代理(需要安装第三方库 “pip install requests[socks]")
| |
- 若代理需要使用 HTTP Basic Auth,可以使用类似http://user:password@host:port 这样的语法来设置代理
| |
- 使用 SOCKS 协议代理
| |
timeout
设置请求的超时时间,(发出请求到服务器返回响应的时间),可以设置连接超时和读取超时
| |
请求分为两个阶段,即连接(connect)和读取(read)。上面设置的 timeout 将用作连接和读取这二者的 timeout 总和
如果想永久等待,可以直接将 timeout 设置为 None,或者不设置直接留空,因为默认是 None
auth
身份认证时使用
| |
如果用户名和密码正确的话,请求时就会自动认证成功,会返回 200 状态码,如果认证失败,则返回 401 状态码
直接传一个元组
它会默认使用 HTTPBasicAuth 这个类来认证
| |
- 使用 OAuth1 认证
| |
allow_redirects
是否允许重定向,默认 True,即允许重定向
response对象
response 类故名思议,它包含了服务器对 http 请求的响应。每次调用 requests 去请求之后,均会返回一个 response 对象,通过调用该对象,可以查看具体的响应信息
以下是 response 对象的部分属性
.url
请求的最终地址
| |
.request
PreparedRequest 对象,可以用于查看发送请求时的信息,比如 r.request.headers 查看请求头
.text
响应的内容,unicode 类型
| |
.content
响应的内容,byte 类型(二进制)
一般在抓取图像时有用
.status_code
响应的 http 状态码
| |
.links
响应的解析头链接
.history
请求的历史记录,可以用于查看重定向信息,以列表形式展示,排序方式是从最旧到最新的请求
| |
.reason
响应状态的描述,比如 “Not Found” or “OK”
.cookies
服务器发回的 cookies,RequestsCookieJar 类型
| |
.json()
用于将响应解析成 JSON 格式,即将返回结果是 JSON 格式的字符串转化为字典
如果返回结果不是 JSON 格式,便会出现解析错误,抛出json.decoder.JSONDecodeError异常
.headers()
响应头,可单独取出某个字段的值,比如(r.headers)[‘content-type’]
| |
session对象
会话维持
requests 中的 session 对象能够让我们跨 http 请求保持某些参数,即让同一个 session 对象发送的请求头携带某个指定的参数。当然,最常见的应用是它可以让 cookie 保持在后续的一串请求中
即,利用 Session 对象,可以方便地维护一个会话
| |
输出
| |
第二次请求已经携带上了第一次请求所设置的 cookie,即通过 session 达到了保持 cookie 的目的
session 让请求之间具有了连贯性
s.cookies.update()
用于设置请求中的 cookies,方便实现跨参数请求,即能够在前后请求之间保持 cookie
传入参数:字典
| |
输出
| |
状态码查询对象 requests.codes
| |
返回码和相应的查询条件
| |
异常处理
requests.exceptions.ConnectionError
- http 的连接数超过最大限制,默认的情况下连接是 Keep-alive 的,所以这就导致了服务器保持了太多连接而不能再新建连接。
- ip 被封
- 程序请求速度过快。
| |