游泳池管理员#

class urllib3.PoolManager(num_pools=10, headers=None, **connection_pool_kw)#

基类:RequestMethods

允许任意请求,同时透明地跟踪必要的连接池。

参数:
  • num_pools (int) -- 丢弃最近使用最少的连接池之前要缓存的连接池数。

  • headers (Mapping[str, str] | None) -- 要包含在所有请求中的头,除非显式给定了其他头。

  • **connection_pool_kw (Any) -- 其他参数用于创建新的 urllib3.connectionpool.ConnectionPool 实例。

例子:

import urllib3

http = urllib3.PoolManager(num_pools=2)

resp1 = http.request("GET", "https://google.com/")
resp2 = http.request("GET", "https://google.com/mail")
resp3 = http.request("GET", "https://yahoo.com/")

print(len(http.pools))
# 2
clear()#

清空我们储存的游泳池,让它们全部关闭。

这不会影响飞行中的连接,但在完成后不会重新使用。

返回类型:

None

connection_from_context(request_context)#

拿到一个 urllib3.connectionpool.ConnectionPool 基于请求上下文。

request_context 必须至少包含 scheme 键及其值必须是 key_fn_by_scheme 实例变量。

参数:

request_context (dict[str, Any]) --

返回类型:

HTTPConnectionPool

connection_from_host(host, port=None, scheme='http', pool_kwargs=None)#

拿到一个 urllib3.connectionpool.ConnectionPool 基于主机、端口和方案。

如果 port 如果没有给出,它将从 scheme 使用 urllib3.connectionpool.port_by_scheme .如果 pool_kwargs 如果提供,则它将与实例的 connection_pool_kw 变量,用于创建新的连接池(如果需要)。

参数:
  • host (str | None) --

  • port (int | None) --

  • scheme (str | None) --

  • pool_kwargs (dict[str, Any] | None) --

返回类型:

HTTPConnectionPool

connection_from_pool_key(pool_key, request_context)#

拿到一个 urllib3.connectionpool.ConnectionPool 基于提供的池密钥。

pool_key 应该是只包含不可变对象的namedtuple。至少它必须有 schemehostport 领域。

参数:
返回类型:

HTTPConnectionPool

connection_from_url(url, pool_kwargs=None)#

类似 urllib3.connectionpool.connection_from_url() .

如果 pool_kwargs 没有提供,需要建造一个新的游泳池, self.connection_pool_kw 用于初始化 urllib3.connectionpool.ConnectionPool .如果 pool_kwargs 如果提供,则改为使用。注意,如果不需要为请求创建新池,则 pool_kwargs 不使用。

参数:
返回类型:

HTTPConnectionPool

proxy: Url | None = None#
proxy_config: ProxyConfig | None = None#
request(method, url, body=None, fields=None, headers=None, json=None, **urlopen_kw)#

使用发出请求 urlopen() 使用适当的编码 fields 基于 method 使用。

这是一种方便的方法,需要最少的手动操作。它可以在大多数情况下使用,但仍然有必要在必要时选择更具体的方法,例如 request_encode_url()request_encode_body() ,甚至最低水平 urlopen() .

参数:
返回类型:

BaseHTTPResponse

request_encode_body(method, url, fields=None, headers=None, encode_multipart=True, multipart_boundary=None, **urlopen_kw)#

使用发出请求 urlopen()fields 编码在身体里。这对于post、put、patch等请求方法很有用。

什么时候 encode_multipart=True (默认),然后 urllib3.encode_multipart_formdata() 用于使用适当的内容类型对有效负载进行编码。否则 urllib.parse.urlencode() 与“application/x-www-form-urlencode”内容类型一起使用。

发布文件时必须使用多部分编码,而且在其他时间使用它也是相当安全的。但是,它可能会中断请求签名,例如使用oauth。

支持可选的 fields 键/值字符串和键/文件元组的参数。filetuple是一个(filename,data,mime type)元组,其中mime类型是可选的。例如::

fields = {
    'foo': 'bar',
    'fakefile': ('foofile.txt', 'contents of foofile'),
    'realfile': ('barfile.txt', open('realfile').read()),
    'typedfile': ('bazfile.bin', open('bazfile').read(),
                  'image/jpeg'),
    'nonamefile': 'contents of nonamefile field',
}

上载文件时,提供文件名(元组的第一个参数)是可选的,但建议最好模拟浏览器的行为。

注意如果 headers 提供时,“content type”头将被覆盖,因为它依赖于用于组成请求主体的动态随机边界字符串。随机边界字符串可以显式地设置为 multipart_boundary 参数。

参数:
返回类型:

BaseHTTPResponse

request_encode_url(method, url, fields=None, headers=None, **urlopen_kw)#

使用发出请求 urlopen()fields 在URL中编码。这对于get、head、delete等请求方法很有用。

参数:
返回类型:

BaseHTTPResponse

urlopen(method, url, redirect=True, **kw)#

相同于 urllib3.HTTPConnectionPool.urlopen() 使用自定义的跨主机重定向逻辑,并且只发送 url

给定的 url 参数必须是绝对的,以便 urllib3.connectionpool.ConnectionPool 可以选择它。

参数:
返回类型:

BaseHTTPResponse

class urllib3.ProxyManager(proxy_url, num_pools=10, headers=None, proxy_headers=None, proxy_ssl_context=None, use_forwarding_for_https=False, proxy_assert_hostname=None, proxy_assert_fingerprint=None, **connection_pool_kw)#

基类:PoolManager

行为就像 PoolManager ,但使用https url的connect方法通过定义的代理发送所有请求。

参数:
  • proxy_url (str) -- 要使用的代理的URL。

  • proxy_headers (Mapping[str, str] | None) -- 包含将发送到代理的标题的字典。在http的情况下,它们是随每个请求一起发送的,而在https/connect的情况下,它们只发送一次。可用于代理身份验证。

  • proxy_ssl_context (ssl.SSLContext | None) -- 代理SSL上下文用于在使用HTTPS代理时建立到代理的TLS连接。

  • use_forwarding_for_https (bool) -- (默认为False)如果设置为True,将代表客户端将请求转发到HTTPS代理,而不是通过connect方法创建TLS隧道。 启用此标志意味着请求和响应头以及内容将从HTTPS代理中可见 而隧道使请求和响应头和内容保持私有。即使禁用此标记,HTTPS代理也始终可以看到IP地址、目标主机名、SNI和端口。

  • proxy_assert_hostname (None | str | Literal[False]) -- 验证所依据的证书的主机名。

  • proxy_assert_fingerprint (str | None) -- 要验证的证书的指纹。

  • num_pools (int) --

  • headers (Mapping[str, str] | None) --

  • connection_pool_kw (Any) --

例子:

import urllib3

proxy = urllib3.ProxyManager("https://localhost:3128/")

resp1 = proxy.request("GET", "https://google.com/")
resp2 = proxy.request("GET", "https://httpbin.org/")

print(len(proxy.pools))
# 1

resp3 = proxy.request("GET", "https://httpbin.org/")
resp4 = proxy.request("GET", "https://twitter.com/")

print(len(proxy.pools))
# 3
connection_from_host(host, port=None, scheme='http', pool_kwargs=None)#

拿到一个 urllib3.connectionpool.ConnectionPool 基于主机、端口和方案。

如果 port 如果没有给出,它将从 scheme 使用 urllib3.connectionpool.port_by_scheme .如果 pool_kwargs 如果提供,则它将与实例的 connection_pool_kw 变量,用于创建新的连接池(如果需要)。

参数:
  • host (str | None) --

  • port (int | None) --

  • scheme (str | None) --

  • pool_kwargs (dict[str, Any] | None) --

返回类型:

HTTPConnectionPool

urlopen(method, url, redirect=True, **kw)#

与http(s)connectionpool.urlopen相同, url 必须是绝对的。

参数:
返回类型:

BaseHTTPResponse

class urllib3.poolmanager.PoolKey(key_scheme, key_host, key_port, key_timeout, key_retries, key_block, key_source_address, key_key_file, key_key_password, key_cert_file, key_cert_reqs, key_ca_certs, key_ssl_version, key_ssl_minimum_version, key_ssl_maximum_version, key_ca_cert_dir, key_ssl_context, key_maxsize, key_headers, key__proxy, key__proxy_headers, key__proxy_config, key_socket_options, key__socks_options, key_assert_hostname, key_assert_fingerprint, key_server_hostname, key_blocksize)#

基类:NamedTuple

可以提供给池管理器、其池或基础连接的所有已知关键字参数。

所有自定义密钥方案应至少包含此密钥中的字段。

参数:
  • key_scheme (str) --

  • key_host (str) --

  • key_port (int | None) --

  • key_timeout (Timeout | float | int | None) --

  • key_retries (Retry | bool | int | None) --

  • key_block (bool | None) --

  • key_source_address (tuple[str, int] | None) --

  • key_key_file (str | None) --

  • key_key_password (str | None) --

  • key_cert_file (str | None) --

  • key_cert_reqs (str | None) --

  • key_ca_certs (str | None) --

  • key_ssl_version (int | str | None) --

  • key_ssl_minimum_version (ssl.TLSVersion | None) --

  • key_ssl_maximum_version (ssl.TLSVersion | None) --

  • key_ca_cert_dir (str | None) --

  • key_ssl_context (ssl.SSLContext | None) --

  • key_maxsize (int | None) --

  • key_headers (frozenset[tuple[str, str]] | None) --

  • key__proxy (Url | None) --

  • key__proxy_headers (frozenset[tuple[str, str]] | None) --

  • key__proxy_config (ProxyConfig | None) --

  • key_socket_options (_TYPE_SOCKET_OPTIONS | None) --

  • key__socks_options (frozenset[tuple[str, str]] | None) --

  • key_assert_hostname (bool | str | None) --

  • key_assert_fingerprint (str | None) --

  • key_server_hostname (str | None) --

  • key_blocksize (int | None) --

key__proxy: Url | None#

字段号19的别名

key__proxy_config: ProxyConfig | None#

第21号字段的别名

key__proxy_headers: frozenset[tuple[str, str]] | None#

字段编号20的别名

key__socks_options: frozenset[tuple[str, str]] | None#

第23号字段的别名

key_assert_fingerprint: str | None#

25号字段的别名

key_assert_hostname: bool | str | None#

第24号字段的别名

key_block: bool | None#

字段号5的别名

key_blocksize: int | None#

第27号字段的别名

key_ca_cert_dir: str | None#

字段号15的别名

key_ca_certs: str | None#

第11号字段的别名

key_cert_file: str | None#

9号字段的别名

key_cert_reqs: str | None#

第10号字段的别名

key_headers: frozenset[tuple[str, str]] | None#

第18号字段的别名

key_host: str#

字段号%1的别名

key_key_file: str | None#

第7号字段的别名

key_key_password: str | None#

第8号字段的别名

key_maxsize: int | None#

第17号字段的别名

key_port: int | None#

字段号2的别名

key_retries: Retry | bool | int | None#

字段号4的别名

key_scheme: str#

字段号0的别名

key_server_hostname: str | None#

字段号26的别名

key_socket_options: _TYPE_SOCKET_OPTIONS | None#

字段号22的别名

key_source_address: tuple[str, int] | None#

第6号字段的别名

key_ssl_context: ssl.SSLContext | None#

第16号字段的别名

key_ssl_maximum_version: ssl.TLSVersion | None#

字段号14的别名

key_ssl_minimum_version: ssl.TLSVersion | None#

字段号13的别名

key_ssl_version: int | str | None#

字段号12的别名

key_timeout: Timeout | float | int | None#

第3号字段的别名