游泳池管理员#
- class urllib3.PoolManager(num_pools=10, headers=None, **connection_pool_kw)#
基类:
RequestMethods
允许任意请求,同时透明地跟踪必要的连接池。
- 参数:
例子:
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
实例变量。- 参数:
- 返回类型:
- 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
变量,用于创建新的连接池(如果需要)。
- connection_from_pool_key(pool_key, request_context)#
拿到一个
urllib3.connectionpool.ConnectionPool
基于提供的池密钥。pool_key
应该是只包含不可变对象的namedtuple。至少它必须有scheme
,host
和port
领域。- 参数:
- 返回类型:
- 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
不使用。- 参数:
- 返回类型:
- 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()
.
- 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
参数。- 参数:
method (str) --
url (str) --
fields (Sequence[Tuple[str, str | bytes | Tuple[str, str | bytes] | Tuple[str, str | bytes, str]] | RequestField] | Mapping[str, str | bytes | Tuple[str, str | bytes] | Tuple[str, str | bytes, str]] | None) --
encode_multipart (bool) --
multipart_boundary (str | None) --
urlopen_kw (str) --
- 返回类型:
- request_encode_url(method, url, fields=None, headers=None, **urlopen_kw)#
使用发出请求
urlopen()
与fields
在URL中编码。这对于get、head、delete等请求方法很有用。
- urlopen(method, url, redirect=True, **kw)#
相同于
urllib3.HTTPConnectionPool.urlopen()
使用自定义的跨主机重定向逻辑,并且只发送url
。给定的
url
参数必须是绝对的,以便urllib3.connectionpool.ConnectionPool
可以选择它。- 参数:
- 返回类型:
- 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) --
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
变量,用于创建新的连接池(如果需要)。
- 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_block (bool | 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_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__proxy (Url | None) --
key__proxy_config (ProxyConfig | None) --
key_socket_options (_TYPE_SOCKET_OPTIONS | None) --
key_assert_fingerprint (str | None) --
key_server_hostname (str | None) --
key_blocksize (int | None) --
- key__proxy_config: ProxyConfig | None#
第21号字段的别名
- key_ssl_context: ssl.SSLContext | None#
第16号字段的别名
- key_ssl_maximum_version: ssl.TLSVersion | None#
字段号14的别名
- key_ssl_minimum_version: ssl.TLSVersion | None#
字段号13的别名