开发者界面 — 请求文档
开发者界面
这部分文档涵盖了 Requests 的所有接口。 对于 Requests 依赖于外部库的部分,我们在此处记录最重要的部分,并提供指向规范文档的链接。
主界面
所有请求的功能都可以通过这 7 种方法访问。 它们都返回 Response 对象的一个实例。
- requests.request(method, url, **kwargs)
构造并发送 Request。
- 参数
method – 新的 Request 对象的方法:
GET
,OPTIONS
,HEAD
,POST
, [ X106X]、PATCH
或DELETE
。url – 新的 Request 对象的 URL。
params –(可选)字典、元组或字节列表,在 Request 的查询字符串中发送。
data –(可选)字典、元组列表、字节或类似文件的对象要在 Request 的正文中发送。
json –(可选)一个 JSON 可序列化的 Python 对象,在 Request 的正文中发送。
headers –(可选)与 Request 一起发送的 HTTP 标头字典。
cookies –(可选)Dict 或 CookieJar 对象与 Request 一起发送。
files –(可选)
'name': file-like-objects
(或{'name': file-tuple}
)字典,用于分段编码上传。file-tuple
可以是二元组('filename', fileobj)
、三元组('filename', fileobj, 'content_type')
或四元组('filename', fileobj, 'content_type', custom_headers)
,其中'content-type'
是一个字符串定义给定文件的内容类型和custom_headers
一个类似 dict 的对象,其中包含要为文件添加的附加标题。auth –(可选)用于启用基本/摘要/自定义 HTTP 身份验证的身份验证元组。
timeout (float or tuple) –(可选)放弃前等待服务器发送数据的秒数,如浮点数或 (连接超时,读取超时) 元组。
allow_redirects (bool) –(可选)布尔值。 启用/禁用 GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD 重定向。 默认为
True
。proxys –(可选)字典映射协议到代理的 URL。
verify –(可选)布尔值,在这种情况下,它控制我们是否验证服务器的 TLS 证书,或字符串,在这种情况下,它必须是要使用的 CA 包的路径。 默认为
True
。stream –(可选)如果
False
,响应内容将被立即下载。cert –(可选)如果是字符串,则是 ssl 客户端证书文件 (.pem) 的路径。 如果元组, ('cert', 'key') 对。
- 退货
响应对象
- 返回类型
用法:
>>> import requests >>> req = requests.request('GET', 'https://httpbin.org/get') >>> req <Response [200]>
- requests.head(url, **kwargs)
- 发送 HEAD 请求。
- 参数
- ;;* url – 新的 Request 对象的 URL。
- **kwargs –
request
采用的可选参数。 如果未提供 allow_redirects,它将被设置为 False(与默认的 request 行为相反)。
- **kwargs –
- requests.get(url, params=None, **kwargs)
- 发送 GET 请求。
- 参数
- ;;* url – 新的 Request 对象的 URL。
- params –(可选)字典、元组或字节列表,在 Request 的查询字符串中发送。
- **kwargs –
request
采用的可选参数。
- requests.post(url, data=None, json=None, **kwargs)
- 发送 POST 请求。
- 参数
- ;;* url – 新的 Request 对象的 URL。
- requests.put(url, data=None, **kwargs)
- 发送 PUT 请求。
- 参数
- ;;* url – 新的 Request 对象的 URL。
- requests.patch(url, data=None, **kwargs)
- 发送 PATCH 请求。
- 参数
- ;;* url – 新的 Request 对象的 URL。
- requests.delete(url, **kwargs)
- 发送 DELETE 请求。
- 参数
- ;;* url – 新的 Request 对象的 URL。
- **kwargs –
request
采用的可选参数。
- **kwargs –
例外
- exception requests.RequestException(*args, **kwargs)
- 处理您的请求时发生了不明确的异常。
- exception requests.ConnectionError(*args, **kwargs)
- 发生连接错误。
- exception requests.HTTPError(*args, **kwargs)
- 发生 HTTP 错误。
- exception requests.URLRequired(*args, **kwargs)
- 发出请求需要有效的 URL。
- exception requests.TooManyRedirects(*args, **kwargs)
- 重定向过多。
- exception requests.ConnectTimeout(*args, **kwargs)
尝试连接到远程服务器时请求超时。
产生此错误的请求可以安全地重试。
- exception requests.ReadTimeout(*args, **kwargs)
- 服务器在分配的时间内没有发送任何数据。
- exception requests.Timeout(*args, **kwargs)
请求超时。
捕获此错误将同时捕获 ConnectTimeout 和 ReadTimeout 错误。
请求会话
- class requests.Session
请求会话。
提供 cookie 持久性、连接池和配置。
基本用法:
>>> import requests >>> s = requests.Session() >>> s.get('https://httpbin.org/get') <Response [200]>
或者作为上下文管理器:
>>> with requests.Session() as s: ... s.get('https://httpbin.org/get') <Response [200]>
- auth
要附加到 Request 的默认身份验证元组或对象。
- cert
SSL 客户端证书默认值,如果为字符串,则为 ssl 客户端证书文件 (.pem) 的路径。 如果元组, ('cert', 'key') 对。
- close()
关闭所有适配器,因此会话
- cookies
包含在此会话中设置的所有当前未完成的 cookie 的 CookieJar。 默认情况下,它是 RequestsCookieJar,但可以是任何其他
cookielib.CookieJar
兼容对象。
- delete(url, **kwargs)
发送 DELETE 请求。 返回 响应 对象。
- get(url, **kwargs)
发送 GET 请求。 返回 响应 对象。
- get_adapter(url)
返回给定 URL 的适当连接适配器。
- get_redirect_target(resp)
接收响应。 返回重定向 URI 或
None
- head(url, **kwargs)
发送 HEAD 请求。 返回 响应 对象。
- hooks
事件处理钩子。
- max_redirects
允许的最大重定向数。 如果请求超过此限制,则会引发 TooManyRedirects 异常。 这默认为 requests.models.DEFAULT_REDIRECT_LIMIT,即 30。
- merge_environment_settings(url, proxies, stream, verify, cert)
检查环境并将其与一些设置合并。
- 返回类型
字典
- mount(prefix, adapter)
将连接适配器注册到前缀。
适配器按前缀长度降序排列。
- options(url, **kwargs)
发送 OPTIONS 请求。 返回 响应 对象。
- params
要附加到每个 请求 的查询字符串数据字典。 字典值可以是用于表示多值查询参数的列表。
- patch(url, data=None, **kwargs)
发送 PATCH 请求。 返回 响应 对象。
- post(url, data=None, json=None, **kwargs)
发送 POST 请求。 返回 响应 对象。
- prepare_request(request)
构造一个 PreparedRequest 用于传输并返回它。 PreparedRequest 具有从 Request 实例和 Session 实例合并的设置。
- 参数
request – Request 实例以准备此会话的设置。
- 返回类型
- proxies
字典映射协议或协议和主机到代理的 URL(例如 {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}) 用于每个 Request。
- put(url, data=None, **kwargs)
发送 PUT 请求。 返回 响应 对象。
- rebuild_auth(prepared_request, response)
当被重定向时,我们可能希望从请求中剥离身份验证以避免泄露凭据。 此方法会在可能的情况下智能地删除并重新应用身份验证,以避免凭据丢失。
- rebuild_method(prepared_request, response)
当被重定向时,我们可能希望根据某些规范或浏览器行为更改请求的方法。
- rebuild_proxies(prepared_request, proxies)
此方法通过考虑环境变量重新评估代理配置。 如果我们被重定向到 NO_PROXY 覆盖的 URL,我们将剥离代理配置。 否则,我们会为此 URL 设置缺少的代理键(以防它们被先前的重定向剥离)。
此方法还会在必要时替换 Proxy-Authorization 标头。
- 返回类型
字典
- request(method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, stream=None, verify=None, cert=None, json=None)
构造一个 Request,准备它并发送它。 返回 响应 对象。
- 参数
method – 新的 Request 对象的方法。
url – 新的 Request 对象的 URL。
params –(可选)要在 Request 的查询字符串中发送的字典或字节。
data –(可选)字典、元组列表、字节或类似文件的对象要在 Request 的正文中发送。
json –(可选)json 发送到 Request 的正文中。
headers –(可选)与 Request 一起发送的 HTTP 标头字典。
cookies –(可选)Dict 或 CookieJar 对象与 Request 一起发送。
files –(可选)
'filename': file-like-objects
字典,用于分段编码上传。auth –(可选)Auth 元组或可调用以启用 Basic/Digest/Custom HTTP Auth。
timeout (float or tuple) –(可选)等待服务器发送数据的时间后放弃,作为float 或 (connect timeout, read timeout) 元组。
allow_redirects (bool) –(可选)默认设置为 True。
proxys –(可选)字典映射协议或协议和主机名到代理的 URL。
stream –(可选)是否立即下载响应内容。 默认为
False
。verify –(可选)布尔值,在这种情况下,它控制我们是否验证服务器的 TLS 证书,或字符串,在这种情况下,它必须是要使用的 CA 包的路径。 默认为
True
。 当设置为False
时,请求将接受服务器提供的任何 TLS 证书,并忽略主机名不匹配和/或过期的证书,这将使您的应用程序容易受到中间人 (MitM) 攻击. 在本地开发或测试期间,将 verify 设置为False
可能很有用。cert –(可选)如果是字符串,则是 ssl 客户端证书文件 (.pem) 的路径。 如果元组, ('cert', 'key') 对。
- 返回类型
- resolve_redirects(resp, req, stream=False, timeout=None, verify=True, cert=None, proxies=None, yield_requests=False, **adapter_kwargs)
接收响应。 返回响应或请求的生成器。
- send(request, **kwargs)
发送给定的 PreparedRequest。
- 返回类型
- should_strip_auth(old_url, new_url)
决定重定向时是否应删除 Authorization 标头
- stream
流响应内容默认。
- trust_env
代理配置、默认身份验证等的信任环境设置。
- verify
SSL 验证默认。 默认为 True,要求请求在远端验证 TLS 证书。 如果 verify 设置为 False,请求将接受服务器提供的任何 TLS 证书,并忽略主机名不匹配和/或过期的证书,这将使您的应用程序容易受到中间人( MitM) 攻击。 仅将此设置为 False 进行测试。
低级班
- class requests.Request(method=None, url=None, headers=None, files=None, data=None, params=None, auth=None, cookies=None, hooks=None, json=None)
用户创建的 Request 对象。
用于准备一个PreparedRequest,发送到服务器。
- 参数
method – 要使用的 HTTP 方法。
url – 要发送的 URL。
headers – 要发送的标头字典。
files – {filename: fileobject} 文件的字典进行分段上传。
data – 附加到请求的正文。 如果提供了字典或元组列表
[(key, value)]
,则将进行表单编码。json – 用于附加到请求的正文的 json(如果未指定文件或数据)。
params – 要附加到 URL 的 URL 参数。 如果提供了字典或元组列表
[(key, value)]
,则将进行表单编码。auth – 身份验证处理程序或 (user, pass) 元组。
cookies – 要附加到此请求的 cookie 字典或 CookieJar。
hooks – 回调钩子字典,供内部使用。
用法:
>>> import requests >>> req = requests.Request('GET', 'https://httpbin.org/get') >>> req.prepare() <PreparedRequest [GET]>
- deregister_hook(event, hook)
取消注册先前注册的钩子。 如果钩子存在,则返回 True,否则返回 False。
- prepare()
构造一个 PreparedRequest 用于传输并返回它。
- register_hook(event, hook)
正确注册一个钩子。
- class requests.Response
Response 对象,包含服务器对 HTTP 请求的响应。
- property apparent_encoding
表观编码,由 charset_normalizer 或 chardet 库提供。
- close()
释放连接回池。 一旦调用了这个方法,就不能再访问底层的
raw
对象。注意:通常不需要显式调用。
- property content
响应的内容,以字节为单位。
- cookies
服务器发回的 CookieJar 的 CookieJar。
- elapsed
从发送请求到响应到达之间经过的时间量(作为 timedelta)。 此属性专门测量发送请求的第一个字节和完成解析标头之间所用的时间。 因此,它不受使用响应内容或
stream
关键字参数的值的影响。
- encoding
访问 r.text 时要解码的编码。
- headers
不区分大小写的响应头字典。 例如,
headers['content-encoding']
将返回'Content-Encoding'
响应头的值。
- history
请求历史记录中的 Response 对象列表。 任何重定向响应都将在此处结束。 该列表按从最早到最近的请求排序。
- property is_permanent_redirect
如果此响应是重定向的永久版本之一,则为真。
- property is_redirect
如果此响应是可以自动处理的格式良好的 HTTP 重定向(通过 Session.resolve_redirects),则为真。
- iter_content(chunk_size=1, decode_unicode=False)
迭代响应数据。 当在请求上设置 stream=True 时,这可以避免将内容一次读入内存以进行大响应。 块大小是它应该读入内存的字节数。 这不一定是返回的每个项目的长度,因为可以进行解码。
chunk_size 必须是 int 或 None 类型。 None 的值将根据 stream 的值发挥不同的作用。 stream=True 将在数据以接收到的任何大小到达时读取数据。 如果stream=False,则数据作为单个块返回。
如果 decode_unicode 为 True,则内容将使用基于响应的最佳可用编码进行解码。
- iter_lines(chunk_size=512, decode_unicode=False, delimiter=None)
迭代响应数据,一次一行。 当在请求上设置 stream=True 时,这可以避免将内容一次读入内存以进行大响应。
笔记
这种方法不是可重入安全的。
- json(**kwargs)
返回响应的 json 编码内容(如果有)。
- 参数
**kwargs –
json.loads
采用的可选参数。- 加注
simplejson.JSONDecodeError – 如果响应正文不包含有效的 json 并且安装了 simplejson。
json.JSONDecodeError – 如果响应正文不包含有效的 json,并且 Python 3 上未安装 simplejson。
ValueError – 如果响应正文不包含有效的 json,并且 Python 2 上未安装 simplejson。
- property links
返回响应的解析头链接(如果有)。
- property next
为重定向链中的下一个请求返回 PreparedRequest(如果有)。
- property ok
如果 status_code 小于 400,则返回 True,否则返回 False。
此属性检查响应的状态代码是否在 400 到 600 之间,以查看是否存在客户端错误或服务器错误。 如果状态代码在 200 到 400 之间,则返回 True。 这是 不是 检查响应代码是否为
200 OK
。
- raise_for_status()
如果发生,则引发 HTTPError。
- raw
响应的类文件对象表示(用于高级用途)。 使用
raw
要求在请求中设置stream=True
。 此要求不适用于请求的内部使用。
- reason
响应 HTTP 状态的文本原因,例如 “未找到”或“确定”。
- request
作为响应的 PreparedRequest 对象。
- status_code
响应 HTTP 状态的整数代码,例如 404 或 200。
- property text
响应的内容,以 Unicode 表示。
如果 Response.encoding 为 None,将使用
charset_normalizer
或chardet
猜测编码。响应内容的编码完全根据 HTTP 标头确定,完全遵循 RFC 2616。 如果您可以利用非 HTTP 知识更好地猜测编码,则应在访问此属性之前适当设置
r.encoding
。
- url
响应的最终 URL 位置。
较低级别的课程
- class requests.PreparedRequest
完全可变的 PreparedRequest 对象,包含将发送到服务器的确切字节。
实例是从 Request 对象生成的,不应手动实例化; 这样做可能会产生不良影响。
用法:
>>> import requests >>> req = requests.Request('GET', 'https://httpbin.org/get') >>> r = req.prepare() >>> r <PreparedRequest [GET]> >>> s = requests.Session() >>> s.send(r) <Response [200]>
- body
请求正文发送到服务器。
- deregister_hook(event, hook)
取消注册先前注册的钩子。 如果钩子存在,则返回 True,否则返回 False。
- headers
HTTP 标头字典。
- hooks
回调钩子字典,供内部使用。
- method
发送到服务器的 HTTP 动词。
- property path_url
构建要使用的路径 URL。
- prepare(method=None, url=None, headers=None, files=None, data=None, params=None, auth=None, cookies=None, hooks=None, json=None)
使用给定的参数准备整个请求。
- prepare_auth(auth, url=)
准备给定的 HTTP 身份验证数据。
- prepare_body(data, files, json=None)
准备给定的 HTTP 正文数据。
- prepare_content_length(body)
根据请求方法和正文准备 Content-Length 标头
- prepare_cookies(cookies)
准备给定的 HTTP cookie 数据。
此函数最终使用 cookielib 从给定的 cookie 生成
Cookie
标头。 由于 cookielib 的设计,如果标头已经存在,将不会重新生成,这意味着在 PreparedRequest 对象的生命周期内只能调用一次此函数。 任何对prepare_cookies
的后续调用都没有实际效果,除非事先删除“Cookie”标头。
- prepare_headers(headers)
准备给定的 HTTP 标头。
- prepare_hooks(hooks)
准备给定的钩子。
- prepare_method(method)
准备给定的 HTTP 方法。
- prepare_url(url, params)
准备给定的 HTTP URL。
- register_hook(event, hook)
正确注册一个钩子。
- url
将请求发送到的 HTTP URL。
- class requests.adapters.BaseAdapter
基本传输适配器
- close()
清理适配器特定项目。
- send(request, stream=False, timeout=None, verify=True, cert=None, proxies=None)
发送 PreparedRequest 对象。 返回响应对象。
- 参数
request – 正在发送的
PreparedRequest
。stream –(可选)是否流式传输请求内容。
timeout (float or tuple) –(可选)等待服务器发送数据的时间后放弃,作为float 或 (connect timeout, read timeout) 元组。
verify –(可选)布尔值,在这种情况下,它控制我们是否验证服务器的 TLS 证书,或字符串,在这种情况下,它必须是要使用的 CA 包的路径
cert –(可选)任何用户提供的要信任的 SSL 证书。
proxies –(可选)要应用于请求的代理字典。
- class requests.adapters.HTTPAdapter(pool_connections=10, pool_maxsize=10, max_retries=0, pool_block=False)
urllib3 的内置 HTTP 适配器。
通过实现传输适配器接口,为请求会话提供一个通用接口来联系 HTTP 和 HTTPS url。 这个类通常由
Session
类在幕后创建。- 参数
pool_connections – 要缓存的 urllib3 连接池的数量。
pool_maxsize – 要保存在池中的最大连接数。
max_retries – 每个连接应该尝试的最大重试次数。 请注意,这仅适用于失败的 DNS 查找、套接字连接和连接超时,而不适用于数据已发送到服务器的请求。 默认情况下,请求不会重试失败的连接。 如果您需要对重试请求的条件进行精细控制,请导入 urllib3 的
Retry
类并传递它。pool_block – 连接池是否应该阻止连接。
用法:
>>> import requests >>> s = requests.Session() >>> a = requests.adapters.HTTPAdapter(max_retries=3) >>> s.mount('http://', a)
- add_headers(request, **kwargs)
添加连接所需的任何标头。 从 v2.0 开始,默认情况下这不做任何事情,但留给子类 HTTPAdapter 的用户覆盖。
这不应从用户代码中调用,并且仅在对 HTTPAdapter 进行子类化时才公开使用。
- 参数
request – 要添加标头的
PreparedRequest
。kwargs – 调用 send() 的关键字参数。
- build_response(req, resp)
从 urllib3 响应构建 Response 对象。 这不应从用户代码中调用,并且仅在对 HTTPAdapter 进行子类化时才公开使用
- 参数
req – 用于生成响应的
PreparedRequest
。resp – urllib3 响应对象。
- 返回类型
- cert_verify(conn, url, verify, cert)
验证 SSL 证书。 此方法不应从用户代码中调用,并且仅在对 HTTPAdapter 进行子类化时才公开使用。
- 参数
conn – 与证书关联的 urllib3 连接对象。
url – 请求的 URL。
verify – 一个布尔值,在这种情况下,它控制我们是否验证服务器的 TLS 证书,或者一个字符串,在这种情况下,它必须是要使用的 CA 包的路径
cert – 要验证的 SSL 证书。
- close()
处置任何内部状态。
目前,这会关闭 PoolManager 和任何活动的 ProxyManager,这会关闭任何池连接。
- get_connection(url, proxies=None)
返回给定 URL 的 urllib3 连接。 这不应从用户代码中调用,并且仅在对 HTTPAdapter 进行子类化时才公开使用。
- 参数
url – 要连接的 URL。
proxies –(可选)用于此请求的代理的请求样式字典。
- 返回类型
urllib3.ConnectionPool
- init_poolmanager(connections, maxsize, block=False, **pool_kwargs)
初始化一个 urllib3 PoolManager。
此方法不应从用户代码中调用,并且仅在对 HTTPAdapter 进行子类化时才公开使用。
- 参数
connections – 要缓存的 urllib3 连接池的数量。
maxsize – 要保存在池中的最大连接数。
block – 当没有可用连接时阻塞。
pool_kwargs – 用于初始化池管理器的额外关键字参数。
- proxy_headers(proxy)
返回要添加到通过代理发送的任何请求的标头字典。 这与 urllib3 魔法一起使用,以确保它们被正确发送到代理,而不是在使用 CONNECT 的情况下在隧道请求中。
这不应从用户代码中调用,并且仅在对 HTTPAdapter 进行子类化时才公开使用。
- 参数
proxy – 用于此请求的代理的 URL。
- 返回类型
字典
- proxy_manager_for(proxy, **proxy_kwargs)
返回给定代理的 urllib3 ProxyManager。
此方法不应从用户代码中调用,并且仅在对 HTTPAdapter 进行子类化时才公开使用。
- 参数
proxy – 要为其返回 urllib3 ProxyManager 的代理。
proxy_kwargs – 用于配置代理管理器的额外关键字参数。
- 退货
代理管理器
- 返回类型
urllib3.ProxyManager
- request_url(request, proxies)
获取在发出最终请求时使用的 url。
如果消息是通过 HTTP 代理发送的,则必须使用完整的 URL。 否则,我们应该只使用 URL 的路径部分。
这不应从用户代码中调用,并且仅在对 HTTPAdapter 进行子类化时才公开使用。
- 参数
request – 正在发送的
PreparedRequest
。proxys – 代理 URL 的方案或方案和主机的字典。
- 返回类型
字符串
- send(request, stream=False, timeout=None, verify=True, cert=None, proxies=None)
发送 PreparedRequest 对象。 返回响应对象。
- 参数
request – 正在发送的
PreparedRequest
。stream –(可选)是否流式传输请求内容。
timeout (float or tuple or urllib3 Timeout object) – (optional)在放弃之前等待服务器发送数据的时间,作为一个浮点数,或者一个 (connect timeout, read timeout) 元组。
verify –(可选)布尔值,在这种情况下,它控制我们是否验证服务器的 TLS 证书,或字符串,在这种情况下,它必须是要使用的 CA 包的路径
cert –(可选)任何用户提供的要信任的 SSL 证书。
proxies –(可选)要应用于请求的代理字典。
- 返回类型
验证
- class requests.auth.AuthBase
- 所有身份验证实现派生自的基类
- class requests.auth.HTTPBasicAuth(username, password)
- 将 HTTP 基本身份验证附加到给定的请求对象。
- class requests.auth.HTTPProxyAuth(username, password)
- 将 HTTP 代理身份验证附加到给定的请求对象。
- class requests.auth.HTTPDigestAuth(username, password)
- 将 HTTP 摘要身份验证附加到给定的请求对象。
编码
- requests.utils.get_encodings_from_content(content)
- 从给定的内容字符串返回编码。
- 参数
- content – 要从中提取编码的字节串。
- requests.utils.get_encoding_from_headers(headers)
- 从给定的 HTTP Header Dict 返回编码。
- 参数
- headers – 提取编码的字典。
- 返回类型
- 字符串
- requests.utils.get_unicode_from_response(r)
以 unicode 形式返回请求的内容。
- 参数
r – 要从中获取 unicode 内容的响应对象。
尝试:
来自内容类型的字符集
回退并替换所有 unicode 字符
- 返回类型
字符串
状态代码查找
- requests.codes
- 别名
codes
对象定义了从 HTTP 状态的通用名称到它们的数字代码的映射,可作为属性或字典项访问。
例子:
>>> import requests
>>> requests.codes['temporary_redirect']
307
>>> requests.codes.teapot
418
>>> requests.codes['\o/']
200
某些代码具有多个名称,并且允许使用名称的大写和小写版本。 例如codes.ok
、codes.OK
、codes.okay
都对应HTTP状态码200。
- 100:
continue
- 101:
switching_protocols
- 102:
processing
- 103:
checkpoint
- 122:
uri_too_long
、request_uri_too_long
- 200:
ok
、okay
、all_ok
、all_okay
、all_good
、\o/
、✓
- 201:
created
- 202:
accepted
- 203:
non_authoritative_info
、non_authoritative_information
- 204:
no_content
- 205:
reset_content
、reset
- 206:
partial_content
、partial
- 207:
multi_status
、multiple_status
、multi_stati
、multiple_stati
- 208:
already_reported
- 226:
im_used
- 300:
multiple_choices
- 301:
moved_permanently
、moved
、\o-
- 302:
found
- 303:
see_other
、other
- 304:
not_modified
- 305:
use_proxy
- 306:
switch_proxy
- 307:
temporary_redirect
、temporary_moved
、temporary
- 308:
permanent_redirect
、resume_incomplete
、resume
- 400:
bad_request
、bad
- 401:
unauthorized
- 402:
payment_required
、payment
- 403:
forbidden
- 404:
not_found
、-o-
- 405:
method_not_allowed
、not_allowed
- 406:
not_acceptable
- 407:
proxy_authentication_required
、proxy_auth
、proxy_authentication
- 408:
request_timeout
、timeout
- 409:
conflict
- 410:
gone
- 411:
length_required
- 412:
precondition_failed
、precondition
- 413:
request_entity_too_large
- 414:
request_uri_too_large
- 415:
unsupported_media_type
、unsupported_media
、media_type
- 416:
requested_range_not_satisfiable
、requested_range
、range_not_satisfiable
- 417:
expectation_failed
- 418:
im_a_teapot
、teapot
、i_am_a_teapot
- 421:
misdirected_request
- 422:
unprocessable_entity
、unprocessable
- 423:
locked
- 424:
failed_dependency
、dependency
- 425:
unordered_collection
、unordered
- 426:
upgrade_required
、upgrade
- 428:
precondition_required
、precondition
- 429:
too_many_requests
、too_many
- 431:
header_fields_too_large
、fields_too_large
- 444:
no_response
、none
- 449:
retry_with
、retry
- 450:
blocked_by_windows_parental_controls
、parental_controls
- 451:
unavailable_for_legal_reasons
、legal_reasons
- 499:
client_closed_request
- 500:
internal_server_error
、server_error
、/o\
、✗
- 501:
not_implemented
- 502:
bad_gateway
- 503:
service_unavailable
、unavailable
- 504:
gateway_timeout
- 505:
http_version_not_supported
、http_version
- 506:
variant_also_negotiates
- 507:
insufficient_storage
- 509:
bandwidth_limit_exceeded
、bandwidth
- 510:
not_extended
- 511:
network_authentication_required
、network_auth
、network_authentication
迁移到 1.x
本节详细介绍了 0.x 和 1.x 之间的主要区别,旨在减轻升级的痛苦。
API 更改
Response.json
现在是可调用的,而不是响应的属性。import requests r = requests.get('https://api.github.com/events') r.json() # This *call* raises an exception if JSON decoding fails
Session
API 已更改。 会话对象不再接受参数。Session
现在也大写,但仍可以用小写session
实例化以实现向后兼容性。s = requests.Session() # formerly, session took parameters s.auth = auth s.headers.update(headers) r = s.get('https://httpbin.org/headers')
除“响应”外,所有请求挂钩均已删除。
身份验证助手已分解为单独的模块。 参见 requests-oauthlib 和 requests-kerberos。
流请求的参数从
prefetch
更改为stream
,逻辑颠倒。 此外,现在需要stream
来读取原始响应。# in 0.x, passing prefetch=False would accomplish the same thing r = requests.get('https://api.github.com/events', stream=True) for chunk in r.iter_content(8192): ...
请求方法的
config
参数已被删除。 其中一些选项现在配置在Session
上,例如保持活动和最大重定向数。 详细选项应通过配置日志记录来处理。import requests import logging # Enabling debugging at http.client level (requests->urllib3->http.client) # you will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA. # the only thing missing will be the response.body which is not logged. try: # for Python 3 from http.client import HTTPConnection except ImportError: from httplib import HTTPConnection HTTPConnection.debuglevel = 1 logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests logging.getLogger().setLevel(logging.DEBUG) requests_log = logging.getLogger("urllib3") requests_log.setLevel(logging.DEBUG) requests_log.propagate = True requests.get('https://httpbin.org/headers')
迁移到 2.x
与 1.0 版本相比,向后不兼容的更改相对较少,但此主要版本仍有一些问题需要注意。
有关此版本中更改的更多详细信息,包括新 API、相关 GitHub 问题的链接和一些错误修复,请阅读 Cory 关于该主题的 博客 。
API 更改
Requests 处理异常的方式发生了一些变化。
RequestException
现在是IOError
的子类,而不是RuntimeError
,因为它可以更准确地对错误类型进行分类。 此外,无效的 URL 转义序列现在会产生RequestException
的子类,而不是ValueError
。requests.get('http://%zz/') # raises requests.exceptions.InvalidURL
最后,由不正确的分块编码引起的
httplib.IncompleteRead
异常现在将引发请求ChunkedEncodingError
。代理 API 略有变化。 现在需要代理 URL 的方案。
proxies = { "http": "10.10.1.10:3128", # use http://10.10.1.10:3128 instead } # In requests 1.x, this was legal, in requests 2.x, # this raises requests.exceptions.MissingSchema requests.get("http://example.org", proxies=proxies)
行为改变
headers
字典中的键现在是所有 Python 版本的原生字符串,即 Python 2 上的字节串和 Python 3 上的 unicode。 如果键不是本机字符串(Python 2 上的 unicode 或 Python 3 上的字节串),它们将被转换为假定 UTF-8 编码的本机字符串类型。headers
字典中的值应始终为字符串。 这是自 1.0 之前的项目位置,但最近的更改(自版本 2.11.0 起)更严格地执行此操作。 建议尽可能避免将标头值作为 unicode 传递。