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 被封
- 程序请求速度过快。
|
|