开发者界面 — 请求文档

来自菜鸟教程
Requests/docs/latest/api
跳转至:导航、​搜索

开发者界面

这部分文档涵盖了 Requests 的所有接口。 对于 Requests 依赖于外部库的部分,我们在此处记录最重要的部分,并提供指向规范文档的链接。

主界面

所有请求的功能都可以通过这 7 种方法访问。 它们都返回 Response 对象的一个实例。

requests.request(method, url, **kwargs)

构造并发送 Request

参数
  • method – 新的 Request 对象的方法:GET, OPTIONS, HEAD, POST, [ X106X]、PATCHDELETE

  • 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。
  • **kwargsrequest 采用的可选参数。 如果未提供 allow_redirects,它将被设置为 False(与默认的 request 行为相反)。
退货
响应对象
返回类型
请求.响应
requests.get(url, params=None, **kwargs)
发送 GET 请求。
参数
;;* url – 新的 Request 对象的 URL。
  • params –(可选)字典、元组或字节列表,在 Request 的查询字符串中发送。
  • **kwargsrequest 采用的可选参数。
退货
响应对象
返回类型
请求.响应
requests.post(url, data=None, json=None, **kwargs)
发送 POST 请求。
参数
;;* url – 新的 Request 对象的 URL。
  • data –(可选)字典、元组列表、字节或类似文件的对象要在 Request 的正文中发送。
  • json –(可选)要在 Request 的正文中发送的 json 数据。
  • **kwargsrequest 采用的可选参数。
退货
响应对象
返回类型
请求.响应
requests.put(url, data=None, **kwargs)
发送 PUT 请求。
参数
;;* url – 新的 Request 对象的 URL。
  • data –(可选)字典、元组列表、字节或类似文件的对象要在 Request 的正文中发送。
  • json –(可选)要在 Request 的正文中发送的 json 数据。
  • **kwargsrequest 采用的可选参数。
退货
响应对象
返回类型
请求.响应
requests.patch(url, data=None, **kwargs)
发送 PATCH 请求。
参数
;;* url – 新的 Request 对象的 URL。
  • data –(可选)字典、元组列表、字节或类似文件的对象要在 Request 的正文中发送。
  • json –(可选)要在 Request 的正文中发送的 json 数据。
  • **kwargsrequest 采用的可选参数。
退货
响应对象
返回类型
请求.响应
requests.delete(url, **kwargs)
发送 DELETE 请求。
参数
;;* url – 新的 Request 对象的 URL。
  • **kwargsrequest 采用的可选参数。
退货
响应对象
返回类型
请求.响应


例外

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)

请求超时。

捕获此错误将同时捕获 ConnectTimeoutReadTimeout 错误。


请求会话

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 请求。 返回 响应 对象。

参数
  • url – 新的 Request 对象的 URL。

  • **kwargsrequest 采用的可选参数。

返回类型

请求.响应

get(url, **kwargs)

发送 GET 请求。 返回 响应 对象。

参数
  • url – 新的 Request 对象的 URL。

  • **kwargsrequest 采用的可选参数。

返回类型

请求.响应

get_adapter(url)

返回给定 URL 的适当连接适配器。

返回类型

requests.adapters.BaseAdapter

get_redirect_target(resp)

接收响应。 返回重定向 URI 或 None

head(url, **kwargs)

发送 HEAD 请求。 返回 响应 对象。

参数
  • url – 新的 Request 对象的 URL。

  • **kwargsrequest 采用的可选参数。

返回类型

请求.响应

headers

要在从此 Session 发送的每个 Request 上发送的不区分大小写的标头字典。

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 请求。 返回 响应 对象。

参数
  • url – 新的 Request 对象的 URL。

  • **kwargsrequest 采用的可选参数。

返回类型

请求.响应

params

要附加到每个 请求 的查询字符串数据字典。 字典值可以是用于表示多值查询参数的列表。

patch(url, data=None, **kwargs)

发送 PATCH 请求。 返回 响应 对象。

参数
  • url – 新的 Request 对象的 URL。

  • data –(可选)字典、元组列表、字节或类似文件的对象要在 Request 的正文中发送。

  • **kwargsrequest 采用的可选参数。

返回类型

请求.响应

post(url, data=None, json=None, **kwargs)

发送 POST 请求。 返回 响应 对象。

参数
  • url – 新的 Request 对象的 URL。

  • data –(可选)字典、元组列表、字节或类似文件的对象要在 Request 的正文中发送。

  • json –(可选)json 发送到 Request 的正文中。

  • **kwargsrequest 采用的可选参数。

返回类型

请求.响应

prepare_request(request)

构造一个 PreparedRequest 用于传输并返回它。 PreparedRequest 具有从 Request 实例和 Session 实例合并的设置。

参数

requestRequest 实例以准备此会话的设置。

返回类型

requests.PreparedRequest

proxies

字典映射协议或协议和主机到代理的 URL(例如 {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}) 用于每个 Request

put(url, data=None, **kwargs)

发送 PUT 请求。 返回 响应 对象。

参数
  • url – 新的 Request 对象的 URL。

  • data –(可选)字典、元组列表、字节或类似文件的对象要在 Request 的正文中发送。

  • **kwargsrequest 采用的可选参数。

返回类型

请求.响应

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 编码内容(如果有)。

参数

**kwargsjson.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_normalizerchardet 猜测编码。

响应内容的编码完全根据 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 内容的响应对象。

尝试:

  1. 来自内容类型的字符集

  2. 回退并替换所有 unicode 字符

返回类型

字符串


饼干

requests.utils.dict_from_cookiejar(cj)
从 CookieJar 返回键/值字典。
参数
cj – 用于从中提取 cookie 的 CookieJar 对象。
返回类型
字典
requests.utils.add_dict_to_cookiejar(cj, cookie_dict)
从键/值字典中返回一个 CookieJar。
参数
;;* cj – 用于插入 cookie 的 CookieJar。
  • cookie_dict – 插入 CookieJar 的键/值字典。
返回类型
饼干罐
requests.cookies.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)
从键/值字典中返回一个 CookieJar。
参数
;;* cookie_dict – 插入 CookieJar 的键/值字典。
  • cookiejar –(可选)一个用于添加 cookie 的 cookiejar。
  • overwrite –(可选)如果为 False,则不会用新的 cookie 替换 jar 中已有的 cookie。
返回类型
饼干罐
class requests.cookies.RequestsCookieJar(policy=None)

兼容类; 是一个 cookielib.CookieJar,但暴露了一个 dict 接口。

这是我们默认为未指定的请求和会话创建的 CookieJar,因为某些客户端可能期望 response.cookies 和 session.cookies 支持 dict 操作。

Requests 在内部不使用 dict 接口; 它只是为了与外部客户端代码兼容。 所有请求代码都应该使用外部提供的 CookieJar 实例开箱即用,例如 LWPCookieJarFileCookieJar

与普通的 CookieJar 不同,这个类是可腌制的。

警告

通常为 O(1) 的字典操作可能是 O(n)。

add_cookie_header(request)

添加正确的 Cookie: 请求头(urllib.request.Request 对象)。

除非 policy.hide_cookie2 为 true,否则还会添加 Cookie2 标头。

clear(domain=None, path=None, name=None)

清除一些cookie。

不带参数调用此方法将清除所有 cookie。 如果给定一个参数,则只会删除属于该域的 cookie。 如果给定两个参数,则删除属于该域中指定路径的 cookie。 如果给定三个参数,则删除具有指定名称、路径和域的 cookie。

如果不存在匹配的 cookie,则引发 KeyError。

clear_expired_cookies()

丢弃所有过期的 cookie。

您可能不需要调用此方法:永远不会将过期的 cookie 发送回服务器(前提是您使用的是 DefaultCookiePolicy),此方法由 CookieJar 本身每隔一段时间调用一次,而 .save() 方法不会无论如何都要保存过期的 cookie(除非您通过传递真正的 ignore_expires 参数来另外询问)。

clear_session_cookies()

丢弃所有会话 cookie。

请注意, .save() 方法无论如何都不会保存会话 cookie,除非您通过传递真正的 ignore_discard 参数来另外询问。

copy()

返回此 RequestsCookieJar 的副本。

extract_cookies(response, request)

在给定请求的情况下,从响应中提取 cookie。

get(name, default=None, domain=None, path=None)

类似字典的 get() 也支持可选的域和路径参数,以解决在多个域上使用一个 cookie jar 时的命名冲突。

警告

操作是 O(n),而不是 O(1)。

get_dict(domain=None, path=None)

将可选域和路径作为参数,并返回满足要求的 cookie 名称-值对的普通旧 Python 字典。

返回类型

字典

get_policy()

返回使用的 CookiePolicy 实例。

items()

类似字典的 items() 从 jar 返回名称-值元组列表。 允许客户端代码调用 dict(RequestsCookieJar) 并获取键值对的普通 Python 字典。

也可以看看

键()和值()。

iteritems()

类似字典的 iteritems() 从 jar 返回一个名称-值元组的迭代器。

也可以看看

iterkeys() 和 itervalues()。

iterkeys()

类似字典的 iterkeys() 从 jar 返回一个 cookie 名称的迭代器。

也可以看看

itervalues() 和 iteritems()。

itervalues()

类似字典的 itervalues() 从 jar 返回一个 cookie 值的迭代器。

也可以看看

iterkeys() 和 iteritems()。

keys()

类似字典的 keys() 返回 jar 中的 cookie 名称列表。

也可以看看

values() 和 items()。

list_domains()

列出 jar 中所有域的实用方法。

list_paths()

列出 jar 中所有路径的实用方法。

make_cookies(response, request)

从响应对象中提取的 Cookie 对象的返回序列。

multiple_domains()

如果 jar 中有多个域,则返回 True。 否则返回 False。

返回类型

布尔值

pop(k[, d]) v, remove specified key and return the corresponding value.

如果未找到 key,则返回 d 如果给定,否则引发 KeyError 。

popitem() (k, v), remove and return some (key, value) pair

作为 2 元组; 但如果 D 为空,则引发 KeyError 。

set(name, value, **kwargs)

类似字典的 set() 还支持可选的域和路径参数,以解决在多个域上使用一个 cookie jar 时的命名冲突。

set_cookie(cookie, *args, **kwargs)

设置一个 cookie,而不检查是否应该设置它。

set_cookie_if_ok(cookie, request)

如果政策说可以这样做,则设置 cookie。

setdefault(k[, d]) D.get(k,d), also set D[k]=d if k not in D
update(other)

使用来自另一个 CookieJar 或类似 dict 的 cookie 更新此 jar

values()

类似字典的 values() 返回来自 jar 的 cookie 值列表。

也可以看看

键()和项目()。

class requests.cookies.CookieConflictError
有两个 cookie 符合 cookie jar 中指定的条件。 使用 .get 和 .set 并包含域和路径参数以便更具体。
with_traceback()
Exception.with_traceback(tb) – 将 self.__traceback__ 设置为 tb 并返回 self。


状态代码查找

requests.codes
别名

codes 对象定义了从 HTTP 状态的通用名称到它们的数字代码的映射,可作为属性或字典项访问。

例子:

>>> import requests
>>> requests.codes['temporary_redirect']
307
>>> requests.codes.teapot
418
>>> requests.codes['\o/']
200

某些代码具有多个名称,并且允许使用名称的大写和小写版本。 例如codes.okcodes.OKcodes.okay都对应HTTP状态码200。

  • 100:continue
  • 101:switching_protocols
  • 102:processing
  • 103:checkpoint
  • 122:uri_too_longrequest_uri_too_long
  • 200:okokayall_okall_okayall_good\o/
  • 201:created
  • 202:accepted
  • 203:non_authoritative_infonon_authoritative_information
  • 204:no_content
  • 205:reset_contentreset
  • 206:partial_contentpartial
  • 207:multi_statusmultiple_statusmulti_statimultiple_stati
  • 208:already_reported
  • 226:im_used
  • 300:multiple_choices
  • 301:moved_permanentlymoved\o-
  • 302:found
  • 303:see_otherother
  • 304:not_modified
  • 305:use_proxy
  • 306:switch_proxy
  • 307:temporary_redirecttemporary_movedtemporary
  • 308:permanent_redirectresume_incompleteresume
  • 400:bad_requestbad
  • 401:unauthorized
  • 402:payment_requiredpayment
  • 403:forbidden
  • 404:not_found-o-
  • 405:method_not_allowednot_allowed
  • 406:not_acceptable
  • 407:proxy_authentication_requiredproxy_authproxy_authentication
  • 408:request_timeouttimeout
  • 409:conflict
  • 410:gone
  • 411:length_required
  • 412:precondition_failedprecondition
  • 413:request_entity_too_large
  • 414:request_uri_too_large
  • 415:unsupported_media_typeunsupported_mediamedia_type
  • 416:requested_range_not_satisfiablerequested_rangerange_not_satisfiable
  • 417:expectation_failed
  • 418:im_a_teapotteapoti_am_a_teapot
  • 421:misdirected_request
  • 422:unprocessable_entityunprocessable
  • 423:locked
  • 424:failed_dependencydependency
  • 425:unordered_collectionunordered
  • 426:upgrade_requiredupgrade
  • 428:precondition_requiredprecondition
  • 429:too_many_requeststoo_many
  • 431:header_fields_too_largefields_too_large
  • 444:no_responsenone
  • 449:retry_withretry
  • 450:blocked_by_windows_parental_controlsparental_controls
  • 451:unavailable_for_legal_reasonslegal_reasons
  • 499:client_closed_request
  • 500:internal_server_errorserver_error/o\
  • 501:not_implemented
  • 502:bad_gateway
  • 503:service_unavailableunavailable
  • 504:gateway_timeout
  • 505:http_version_not_supportedhttp_version
  • 506:variant_also_negotiates
  • 507:insufficient_storage
  • 509:bandwidth_limit_exceededbandwidth
  • 510:not_extended
  • 511:network_authentication_requirednetwork_authnetwork_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-oauthlibrequests-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')


许可

与 API 无关的一个关键区别是许可证从 ISC 许可证更改为 Apache 2.0 许可证。 Apache 2.0 许可证确保对请求的贡献也包含在 Apache 2.0 许可证中。


迁移到 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 传递。