本文由 大侠(AhcaoZhu)原创,转载请声明。
链接: https://blog.csdn.net/Ahcao2008
一图看懂 urllib3 模块:一个具有线程安全连接池,支持文件post,清晰友好的HTTP库,资料整理+笔记(大全)
- 🧊摘要
- 🧊模块图
- 🧊类关系图
- 🧊模块全展开
- ☘️【urllib3】
- 🔵统计
- 🔵常量
- 🔵模块
- 🔵函数
- 🌿16 connection_from_url(url, **kw)
- 🌿17 encode_multipart_formdata(fields, boundary=None)
- 🌿18 proxy_from_url(url, **kw)
- 🌿19 make_headers(keep_alive=None, accept_encoding=None, user_agent=None, basic_auth=None, proxy_basic_auth=None, disable_cache=None)
- 🌿20 get_host(url)
- 🌿21 add_stderr_logger(level=10)
- 🌿22 disable_warnings(category=<class 'urllib3.exceptions.HTTPWarning'>)
- 🔵类
- 🌿23 urllib3.connectionpool.HTTPConnectionPool
- 🌿24 urllib3.connectionpool.HTTPSConnectionPool
- 🌿25 urllib3.poolmanager.PoolManager
- data
- method
- 3 clear(self)
- 4 connection_from_context(self, request_context)
- 5 connection_from_host(self, host, port=None, scheme="http", pool_kwargs=None)
- 6 connection_from_pool_key(self, pool_key, request_context=None)
- 7 connection_from_url(self, url, pool_kwargs=None)
- 8 urlopen(self, method, url, redirect=True, **kw)
- 🌿26 urllib3.poolmanager.ProxyManager
- 🌿27 urllib3.response.HTTPResponse
- data
- property
- method
- 7 close(self)
- 8 drain_conn(self)
- 9 fileno(self)
- 10 flush(self)
- 11 get_redirect_location(self)
- 12 getheader(self, name, default=None)
- 13 getheaders(self)
- 14 geturl(self)
- 15 info(self)
- 16 isclosed(self)
- 17 read(self, amt=None, decode_content=None, cache_content=False)
- 18 read_chunked(self, amt=None, decode_content=None)
- 19 readable(self)
- 20 readinto(self, b)
- 21 release_conn(self)
- 22 stream(self, amt=2 ** 16, decode_content=None)
- 23 supports_chunked_reads(self)
- 24 tell(self)
- class method
- 25 from_httplib(ResponseCls, r, **response_kw)
- 🌿28 urllib3.util.retry.Retry
- data
- method
- 6 get_backoff_time(self)
- 7 get_retry_after(self, response)
- 8 increment(
- 9 is_exhausted(self)
- 10 is_retry(self, method, status_code, has_retry_after=False)
- 11 new(self, **kw)
- 12 parse_retry_after(self, retry_after)
- 13 sleep(self, response=None)
- 14 sleep_for_retry(self, response=None)
- class method
- 15 from_int(cls, retries, redirect=True, default=None)
- 🌿29 urllib3.util.timeout.Timeout
- 🔵私有或局部
- 🔵剩余
- ☘️【urllib3.contrib._appengine_environ】
- 🔵统计
- 🔵模块
- 🔵函数
- ☘️【urllib3.util.wait】
- 🔵统计
- 🔵模块
- 🔵函数
- 🌿4 _retry_on_intr(fn, timeout)
- 🌿5 select_wait_for_socket(sock, read=False, write=False, timeout=None)
- 🌿6 poll_wait_for_socket(sock, read=False, write=False, timeout=None)
- 🌿7 null_wait_for_socket(*args, **kwargs)
- 🌿8 _have_working_poll()
- 🌿9 select_wait_for_socket(sock, read=False, write=False, timeout=None)
- 🌿10 wait_for_read(sock, timeout=None)
- 🌿11 wait_for_write(sock, timeout=None)
- 🔵类
- 🔵内嵌函数或方法
- 🔵私有或局部
- ☘️【urllib3.util.retry】
- 🔵统计
- 🔵模块
- 🔵函数
- 🔵类
- 🌿8 itertools.takewhile
- 🌿9 urllib3.exceptions.ConnectTimeoutError
- 🌿10 urllib3.exceptions.InvalidHeader
- 🌿11 urllib3.exceptions.MaxRetryError
- 🌿12 urllib3.exceptions.ProtocolError
- 🌿13 urllib3.exceptions.ProxyError
- 🌿14 urllib3.exceptions.ReadTimeoutError
- 🌿15 urllib3.exceptions.ResponseError
- 🌿16 urllib3.util.retry.RequestHistory
- 🌿17 urllib3.util.retry._RetryMeta
- 🌿18 urllib3.util.retry.Retry
- 🔵私有或局部
- 🔵剩余
- ☘️【urllib3.util.url】
- 🔵统计
- 🔵常量
- 🔵模块
- 🔵函数
- 🌿22 namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
- 🌿23 split_first(s, delims)
- 🌿24 _encode_invalid_chars(component, allowed_chars, encoding='utf-8')
- 🌿25 _remove_path_dot_segments(path)
- 🌿26 _normalize_host(host, scheme)
- 🌿27 _idna_encode(name)
- 🌿28 _encode_target(target)
- 🌿29 parse_url(url)
- 🌿30 get_host(url)
- 🔵类
- 🔵私有或局部
- 🔵剩余
- ☘️【urllib3.util.ssltransport】
- 🔵统计
- 🔵常量
- 🔵模块
- 🔵类
- 🌿6 urllib3.exceptions.ProxySchemeUnsupported
- 🌿7 urllib3.util.ssltransport.SSLTransport
- method
- 1 cipher(self)
- 2 close(self)
- 3 compression(self)
- 4 fileno(self)
- 5 getpeercert(self, binary_form=False)
- 6 gettimeout(self)
- 7 makefile(
- 8 read(self, len=1024, buffer=None)
- 9 recv(self, len=1024, flags=0)
- 10 recv_into(self, buffer, nbytes=None, flags=0)
- 11 selected_alpn_protocol(self)
- 12 selected_npn_protocol(self)
- 13 send(self, data, flags=0)
- 14 sendall(self, data, flags=0)
- 15 settimeout(self, value)
- 16 shared_ciphers(self)
- 17 unwrap(self)
- 18 version(self)
- ☘️【urllib3.util.ssl_】
- 🔵统计
- 🔵常量
- 🔵模块
- 🔵函数
- 🌿13 _const_compare_digest_backport(a, b)
- 🌿14 wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=<VerifyMode.CERT_NONE: 0>, ssl_version=<_SSLMethod.PROTOCOL_TLS: 2>, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None)
- 🌿15 assert_fingerprint(cert, fingerprint)
- 🌿16 resolve_cert_reqs(candidate)
- 🌿17 resolve_ssl_version(candidate)
- 🌿18 create_urllib3_context(ssl_version=None, cert_reqs=None, options=None, ciphers=None)
- 🌿19 ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None, ca_certs=None, server_hostname=None, ssl_version=None, ciphers=None, ssl_context=None, ca_cert_dir=None, key_password=None, ca_cert_data=None, tls_in_tls=False)
- 🌿20 is_ipaddress(hostname)
- 🌿21 _is_key_file_encrypted(key_file)
- 🌿22 _ssl_wrap_socket_impl(sock, ssl_context, tls_in_tls, server_hostname=None)
- 🔵类
- 🌿23 urllib3.exceptions.InsecurePlatformWarning
- 🌿24 urllib3.exceptions.ProxySchemeUnsupported
- 🌿24 urllib3.exceptions.SNIMissingWarning
- 🌿25 urllib3.exceptions.SSLError
- 🌿26 ssl.SSLContext
- data
- property
- method
- 10 load_default_certs(self, purpose=Purpose.SERVER_AUTH)
- 11 set_alpn_protocols(self, alpn_protocols)
- 12 set_npn_protocols(self, npn_protocols)
- 13 set_servername_callback(self, server_name_callback)
- 14 wrap_bio(self, incoming, outgoing, server_side=False,
- 15 wrap_socket(self, sock, server_side=False,
- 🌿27 urllib3.util.ssltransport.SSLTransport
- 🔵内嵌函数或方法
- 🔵私有或局部
- 🔵剩余
- ☘️【urllib3.util.timeout】
- 🔵统计
- 🔵模块
- 🔵类
- 🔵内嵌函数或方法
- 🔵私有或局部
- 🔵剩余
- ☘️【urllib3.util.proxy】
- 🔵统计
- 🔵函数
- 🌿1 create_urllib3_context(ssl_version=None, cert_reqs=None, options=None, ciphers=None)
- 🌿2 resolve_cert_reqs(candidate)
- 🌿3 resolve_ssl_version(candidate)
- 🌿4 connection_requires_http_tunnel(proxy_url=None, proxy_config=None, destination_scheme=None)
- 🌿5 create_proxy_ssl_context(ssl_version, cert_reqs, ca_certs=None, ca_cert_dir=None, ca_cert_data=None)
- ☘️【urllib3.util.ssl_match_hostname】
- 🔵统计
- 🔵常量
- 🔵模块
- 🔵函数
- 🔵类
- 🔵私有或局部
- ☘️【urllib3.util.queue】
- ☘️【urllib3.packages】
- ☘️【urllib3.exceptions】
- ☘️【urllib3._version】
- ☘️【urllib3.contrib】
- ☘️【urllib3.util】
- ☘️【urllib3._collections】
- ☘️【urllib3.connection】
- ☘️【urllib3.fields】
- ☘️【urllib3.filepost】
- ☘️【urllib3.request】
- ☘️【urllib3.response】
- ☘️【urllib3.connectionpool】
- ☘️【urllib3.poolmanager】
- ☘️【urllib3.packages.six】
- ☘️【urllib3.contrib.socks】
- ☘️【urllib3.util.connection】
- ☘️【urllib3.util.request】
- ☘️【urllib3.util.response】
- ☘️【datetime】
- ☘️【os】
- ☘️【re】
- ☘️【socket】
- ☘️【ssl】
- ☘️【email】
- ☘️【mimetypes】
- ☘️【binascii】
- ☘️【codecs】
- ☘️【io】
- ☘️【sys】
- ☘️【zlib】
- ☘️【errno】
- ☘️【queue】
- ☘️【collections】
- ☘️【functools】
- ☘️【itertools】
- ☘️【operator】
- ☘️【types】
- ☘️【socks】
- ☘️【select】
- ☘️【http.client】
- ☘️【logging】
- ☘️【warnings】
- ☘️【time】
- ☘️【hmac】
- ☘️【ipaddress】
🧊摘要
- 全文介绍python的 urllib3 模块(一个具有线程安全连接池,支持文件post,清晰友好的HTTP库)、函数、类及类的方法和属性。
- 它通过代码抓取并经AI智能翻译和人工校对。
- 是一部不可多得的权威字典类工具书。它是系列集的一部分。后续陆续发布、敬请关注。【原创:AhcaoZhu大侠】
🧊模块图
urllib3.packages
urllib3.packages.six
urllib3.exceptions
urllib3._version
urllib3.contrib
urllib3.contrib._appengine_environ
urllib3.contrib.socks
◆socks
urllib3.util
urllib3.util.wait
◆select
urllib3.util.connection
urllib3.util.request
urllib3.util.response
◆http.client
urllib3.util.retry
urllib3.util.url
urllib3.util.ssltransport
urllib3.util.ssl_
urllib3.util.timeout
urllib3.util.proxy
urllib3.util.ssl_match_hostname
◆ipaddress
urllib3.util.queue
urllib3._collections
urllib3.connection
urllib3.fields
urllib3.filepost
urllib3.request
urllib3.response
urllib3.connectionpool
◆queue
urllib3.poolmanager
🧊类关系图
◆object
◆BaseException
◆Exception
◆ValueError
urllib3.exceptions.HTTPError
◆ValueError
urllib3.exceptions.BodyNotHttplibCompatible
urllib3.exceptions.DecodeError
urllib3.exceptions.HeaderParsingError
urllib3.exceptions.IncompleteRead
urllib3.exceptions.InvalidChunkLength
urllib3.exceptions.InvalidHeader
urllib3.exceptions.PoolError
urllib3.exceptions.ClosedPoolError
urllib3.exceptions.EmptyPoolError
urllib3.exceptions.RequestError
urllib3.exceptions.HostChangedError
urllib3.exceptions.MaxRetryError
urllib3.exceptions.TimeoutError
urllib3.exceptions.ConnectTimeoutError
urllib3.exceptions.NewConnectionError
urllib3.exceptions.ReadTimeoutError
urllib3.exceptions.TimeoutError
urllib3.exceptions.ProtocolError
urllib3.exceptions.ResponseNotChunked
urllib3.exceptions.ProxyError
urllib3.exceptions.ResponseError
urllib3.exceptions.SSLError
urllib3.exceptions.TimeoutError
urllib3.exceptions.TimeoutStateError
urllib3.exceptions.UnrewindableBodyError
urllib3.exceptions.LocationValueError
urllib3.exceptions.LocationParseError
urllib3.exceptions.URLSchemeUnknown
◆AssertionError
urllib3.exceptions.ProxySchemeUnknown
urllib3.exceptions.ProxySchemeUnsupported
urllib3.util.ssl_match_hostname.CertificateError
◆Warning
urllib3.exceptions.HTTPWarning
urllib3.exceptions.DependencyWarning
urllib3.exceptions.SNIMissingWarning
urllib3.exceptions.SecurityWarning
urllib3.exceptions.InsecurePlatformWarning
urllib3.exceptions.InsecureRequestWarning
urllib3.exceptions.SubjectAltNameWarning
urllib3.exceptions.SystemTimeWarning
◆http.client.HTTPException
◆http.client.IncompleteRead
urllib3.exceptions.HTTPError
urllib3.exceptions.HTTPError
urllib3.util.wait.NoWayToWaitForSocketError
◆_io._IOBase
◆io.IOBase
urllib3.response.HTTPResponse
◆collections.abc.Container
◆collections.abc.Iterable
◆collections.abc.Sized
◆collections.abc.Collection
◆collections.abc.Mapping
◆collections.abc.MutableMapping
urllib3._collections.HTTPHeaderDict
urllib3._collections.RecentlyUsedContainer
◆http.client.HTTPConnection
urllib3.connection.HTTPConnection
urllib3.connection.HTTPSConnection
urllib3.contrib.socks.SOCKSConnection
urllib3.contrib.socks.SOCKSHTTPSConnection
urllib3.contrib.socks.SOCKSConnection
◆module
urllib3.packages.six.Module_six_moves_urllib
urllib3.packages.six._LazyModule
urllib3.packages.six.Module_six_moves_urllib_error
urllib3.packages.six.Module_six_moves_urllib_parse
urllib3.packages.six.Module_six_moves_urllib_request
urllib3.packages.six.Module_six_moves_urllib_response
urllib3.packages.six.Module_six_moves_urllib_robotparser
urllib3.packages.six._MovedItems
◆queue.Queue
urllib3.util.queue.LifoQueue
◆tuple
urllib3.poolmanager.PoolKey
urllib3.poolmanager.ProxyConfig
urllib3.util.retry.RequestHistory
urllib3.util.url.Url
urllib3.util.url.Url
◆type
urllib3.util.retry._RetryMeta
urllib3.connection.DummyConnection
urllib3.connectionpool.ConnectionPool
urllib3.connectionpool.HTTPConnectionPool
urllib3.connectionpool.HTTPSConnectionPool
urllib3.contrib.socks.SOCKSHTTPSConnectionPool
urllib3.contrib.socks.SOCKSHTTPConnectionPool
urllib3.fields.RequestField
urllib3.packages.six._LazyDescr
urllib3.packages.six.MovedAttribute
urllib3.packages.six.MovedModule
urllib3.packages.six._SixMetaPathImporter
urllib3.request.RequestMethods
urllib3.connectionpool.ConnectionPool
urllib3.poolmanager.PoolManager
urllib3.contrib.socks.SOCKSProxyManager
urllib3.poolmanager.ProxyManager
urllib3.response.DeflateDecoder
urllib3.response.GzipDecoder
urllib3.response.GzipDecoderState
urllib3.response.MultiDecoder
urllib3.util.retry.Retry
urllib3.util.ssltransport.SSLTransport
urllib3.util.timeout.Timeout
🧊模块全展开
☘️【urllib3】
urllib3, fullname=urllib3, file=urllib3_init_.py
Python HTTP库,具有线程安全的连接池,文件发布支持,用户友好等等
🔵统计
序号 | 类别 | 数量 |
---|---|---|
4 | str | 8 |
5 | tuple | 1 |
6 | list | 1 |
8 | dict | 1 |
9 | module | 15 |
10 | class | 7 |
11 | function | 7 |
13 | residual | 3 |
14 | system | 13 |
15 | private | 2 |
16 | all | 43 |
🔵常量
🔵模块
🌿1 logging
logging, fullname=logging, file=logging_init_.py
🌿2 warnings
warnings, fullname=warnings, file=warnings.py
🌿3 urllib3.packages
packages, fullname=urllib3.packages, file=urllib3\packages_init_.py
🌿4 urllib3.exceptions
exceptions, fullname=urllib3.exceptions, file=urllib3\exceptions.py
🌿5 urllib3._version
_version, fullname=urllib3._version, file=urllib3_version.py
🌿6 urllib3.contrib
contrib, fullname=urllib3.contrib, file=urllib3\contrib_init_.py
🌿7 urllib3.util
util, fullname=urllib3.util, file=urllib3\util_init_.py
🌿8 urllib3._collections
_collections, fullname=urllib3._collections, file=urllib3_collections.py
🌿9 urllib3.connection
connection, fullname=urllib3.connection, file=urllib3\connection.py
🌿10 urllib3.fields
fields, fullname=urllib3.fields, file=urllib3\fields.py
🌿11 urllib3.filepost
filepost, fullname=urllib3.filepost, file=urllib3\filepost.py
🌿12 urllib3.request
request, fullname=urllib3.request, file=urllib3\request.py
🌿13 urllib3.response
response, fullname=urllib3.response, file=urllib3\response.py
🌿14 urllib3.connectionpool
connectionpool, fullname=urllib3.connectionpool, file=urllib3\connectionpool.py
🌿15 urllib3.poolmanager
poolmanager, fullname=urllib3.poolmanager, file=urllib3\poolmanager.py
🔵函数
🌿16 connection_from_url(url, **kw)
connection_from_url(url, **kw), module=urllib3.connectionpool, line:1067 at site-packages\urllib3\connectionpool.py
给定一个url,返回一个:class:`.ConnectionPool`的实例。
这是一个快捷方式,在创建:class:`.ConnectionPool`的实例之前不必解析url的模式、主机和端口。
:param url: 绝对url字符串,必须包含方案。端口可选。
:param \**kw: 将额外的参数传递给相应的:class:`.connectionpool`的构造函数。用于指定诸如timeout,maxsize, header等。
例子:
>>> conn = connection_from_url('http://google.com/')
>>> r = conn.request('GET', '/')
🌿17 encode_multipart_formdata(fields, boundary=None)
encode_multipart_formdata(fields, boundary=None), module=urllib3.filepost, line:63 at site-packages\urllib3\filepost.py
使用multipart/form-data MIME格式编码一个 `fields` 的字典。
:param fields: 字段的字典或列表 (key, :class:`~urllib3.fields.RequestField`).
:param boundary: 如果未指定,则使用 :func:`urllib3.filepost.choose_boundary`.
🌿18 proxy_from_url(url, **kw)
proxy_from_url(url, **kw), module=urllib3.poolmanager, line:536 at site-packages\urllib3\poolmanager.py
🌿19 make_headers(keep_alive=None, accept_encoding=None, user_agent=None, basic_auth=None, proxy_basic_auth=None, disable_cache=None)
make_headers(keep_alive=None, accept_encoding=None, user_agent=None, basic_auth=None, proxy_basic_auth=None, disable_cache=None), module=urllib3.util.request, line:29 at site-packages\urllib3\util\request.py
生成请求标头的快捷方式。
:param keep_alive: 如果 ``True``, 则添加 'connection: keep-alive' 头。
:param accept_encoding: 可以是布尔值、列表或字符串。``True``翻译成'gzip,deflate'。列表将由逗号连接。字符串将按提供的方式使用。
:param user_agent: 表示你想要的user-agent的字符串,例如 "python-urllib3/0.6"
:param basic_auth: 冒号分隔的 username:password 字符串,用于 'authorization: basic ...'头。
:param proxy_basic_auth: 以冒号分隔的 username:password 字符串,用于 'proxy-authorization: basic ...' 头。
:param disable_cache: 如果 ``True``, 则添加 'cache-control: no-cache' 头。
例子:
>>> make_headers(keep_alive=True, user_agent="Batman/1.0")
{'connection':`keep-alive', 'user-agent':`Batman/1.0'}
>>> make_headers(accept_encoding=True)
{'accept-encoding':`gzip,deflate'}
🌿20 get_host(url)
get_host(url), module=urllib3.util.url, line:430 at site-packages\urllib3\util\url.py
弃用。使用:func:`parse_url`代替。
🌿21 add_stderr_logger(level=10)
add_stderr_logger(level=10), module=urllib3, line:63 at site-packages\urllib3_init_.py
用于快速向日志记录器添加StreamHandler的Helper。用于调试。
在添加处理程序后返回处理程序。
🌿22 disable_warnings(category=<class ‘urllib3.exceptions.HTTPWarning’>)
disable_warnings(category=<class ‘urllib3.exceptions.HTTPWarning’>), module=urllib3, line:98 at site-packages\urllib3_init_.py
帮助快速禁用所有urllib3警告。
🔵类
🌿23 urllib3.connectionpool.HTTPConnectionPool
HTTPConnectionPool, urllib3.connectionpool.HTTPConnectionPool, module=urllib3.connectionpool, line:105 at site-packages\urllib3\connectionpool.py
一个主机的线程安全连接池。
:param host: 用于此HTTP连接的主机(例如:"localhost"),传递给:class:`http.client.HTTPConnection`。
:param port: 此HTTP连接使用的端口(None相当于80),传递给:class:`HTTP.client.httpconnection'。
:param strict: 如果状态行不能被解析为有效的HTTP/1.0或1.1状态行,导致BadStatusLine被引发,传入:class:`HTTP.client.httpconnection'。
注意:仅适用于Python 2。该参数在Python 3中被忽略。
:param timeout: 超时的对象。每个单独连接的套接字超时(以秒为单位)。它可以是一个浮点数或整数,用于设置HTTP请求的超时时间,
也可以是:class:`urllib3.util的实例。它为您提供了对请求超时的更细粒度的控制。
解析构造函数之后,它总是一个`urllib3.util`。
:param maxsize: 要保存的可重用的连接数。大于1在多线程情况下很有用。如果block设置为False,则会创建更多的连接,但一旦使用就不会保存。
:param block: 如果设置为True,则每次使用的连接数不超过``maxsize``。当没有可用的空闲连接时,调用将阻塞,直到一个连接被释放。
这对于特定的多线程情况是一个有用的副作用,在这种情况下,人们不想在每个主机上使用超过maxsize的连接来防止泛滥。
:param headers: 所有请求都包含的头,除非显式给出了其他头。
:param retries: 重试配置以默认情况下使用此池中的请求。
:param _proxy: 解析代理URL,不应该直接使用,而是参见:class:`urllib3.ProxyManager`
:param _proxy_headers: 一个带有代理头的字典,不应该直接使用,相反,请参阅:class:`urllib3.ProxyManager`
:param \**conn_kw: 附加参数用于创建fresh:class:`urllib3.connection.HTTPConnection`,
:class:`urllib3.connection.HTTPSConnection`的实例。
data
1 ConnectionCls=<class ‘urllib3.connection.HTTPConnection’> kind:data type:type class:<class ‘urllib3.connectionpool.HTTPConnectionPool’>
2 ResponseCls=<class ‘urllib3.response.HTTPResponse’> kind:data type:ABCMeta class:<class ‘urllib3.connectionpool.HTTPConnectionPool’>
3 scheme=http kind:data type:str class:<class ‘urllib3.connectionpool.HTTPConnectionPool’>
method
4 close(self)
kind=method class=HTTPConnectionPool objtype=function line:483 at …\lib\site-packages\urllib3\connectionpool.py
关闭所有池连接并禁用池。
5 is_same_host(self, url)
kind=method class=HTTPConnectionPool objtype=function line:501 at …\lib\site-packages\urllib3\connectionpool.py
检查给定的``url``是否与此连接池属于同一主机。
6 urlopen(
kind=method class=HTTPConnectionPool objtype=function line:522 at …\lib\site-packages\urllib3\connectionpool.py
从池中获取连接并执行HTTP请求。这是发出请求的最低级别调用,因此您需要指定所有原始细节。
注意:更常见的是,使用:class:`.RequestMethods`提供的方便方法是合适的。例如:meth:`request`
注意:`release_conn`只会在 `preload_content=False` 时表现得像预期的那样,因为我们想让 `preload_content=False`
在不破坏向后兼容性的情况下很快成为默认行为。
:param method: HTTP请求方法(如GET、POST、PUT等)
:param url: 执行请求的url。
:param body: 在请求体中发送的数据,可以是:class:`str`,:class:`bytes`,一个:class:`str`/:class:`bytes`的可迭代对象,或者一个类似文件的对象。
:param headers: 要发送的自定义头的字典,例如User-Agent, If-None-Match等。
如果为None,则使用池头。如果提供,这些头文件将完全替换任何特定于池的头文件。
:param retries: 在引发 :class:`~urllib3.exceptions.MaxRetryError` 之前,配置允许的重试次数。
在收到响应之前,传递“None”进行重试。传递一个 :class:`~urllib3.util.retry.Retry` 对象,以便对不同类型的重试进行细粒度控制。
传递一个整数来重试该次数的连接错误,但没有其他类型的错误。传递0表示不再重试。
如果 `False` ,则禁用重试,并立即引发任何异常。此外,将返回重定向响应,而不是在重定向时引发MaxRetryError。
:type retries: :class:`~urllib3.util.retry.Retry`,False或int。
:param redirect: 如果为True,自动处理重定向(状态码301、302、303、307、308)。
每次重定向都算作一次重试。禁用重试也将禁用重定向。
:param assert_same_host: 如果 ``True`` ,将确保请求池的主机是一致的,否则将引发HostChangedError。
当``False``时,您可以在HTTP代理上使用该池并请求外部主机。
:param timeout: 如果指定,覆盖此请求的默认超时。它可以是浮点数(以秒为单位)或:class:`urllib3.util.Timeout`的实例。
:param pool_timeout: 如果设置并将池设置为block=True,则此方法将阻塞 ``pool_timeout`` 秒,并在时间段内没有可用连接时引发EmptyPoolError。
:param release_conn: 如果为False,则一旦收到响应,urlopen调用将不会将连接释放回池中(但如果读取响应的整个内容,例如当`preload_content=True`,则会释放)。
如果您没有立即预加载响应的内容,这是有用的。您需要调用``r`` 在响应 ``r.release_conn()`` 以将连接返回到池中。
如果None,则取 ``response_kw.get('preload_content', True)``。
:param chunked: 如果为True, urllib3将使用分块传输编码发送正文。否则,urllib3将使用标准的内容长度形式发送正文。默认为False。
:param int body_pos: 重试或重定向时要在类文件体中查找到的位置。通常不需要设置这个值,因为urllib3会在需要时自动填充这个值。
:param \**response_kw: 额外的参数被传递给:meth:`urllib3.response.HTTPResponse.from_httplib`。
🌿24 urllib3.connectionpool.HTTPSConnectionPool
HTTPSConnectionPool, urllib3.connectionpool.HTTPSConnectionPool, module=urllib3.connectionpool, line:897 at site-packages\urllib3\connectionpool.py
与:class:`.HTTPConnectionPool`,但HTTPS除外。
类:class:`.HTTPSConnection` 使用``assert_fingerprint``,``assert_hostname`` 和 ``host`` 中的一个按此顺序来验证连接。
如果 ``assert_hostname`` 为False,则不进行验证。
``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``, ``ca_cert_dir``, ``ssl_version``, ``key_password``
仅在:mod:`ssl`可用时使用,并被馈送到 :meth:`urllib3.util.ssl_wrap_socket` 将连接套接字升级为ssl套接字。
data
1 ConnectionCls=<class ‘urllib3.connection.HTTPSConnection’> kind:data type:type class:<class ‘urllib3.connectionpool.HTTPSConnectionPool’>
2 scheme=https kind:data type:str class:<class ‘urllib3.connectionpool.HTTPSConnectionPool’>
🌿25 urllib3.poolmanager.PoolManager
PoolManager, urllib3.poolmanager.PoolManager, module=urllib3.poolmanager, line:140 at site-packages\urllib3\poolmanager.py
允许任意请求,同时透明地为您跟踪必要的连接池。
:param num pools: 在丢弃最近最少使用的连接池之前要缓存的连接池数量。
:param headers: 所有请求都包含的头,除非显式给出了其他头。
:param \**connection_pool_kw: 附加参数用于创建 :class:`urllib3.connectionpool.ConnectionPool` 实例。
例子:
>>> manager = PoolManager(num_pools=2)
>>> r = manager.request('GET', 'http://google.com/')
>>> r = manager.request('GET', 'http://google.com/mail')
>>> r = manager.request('GET', 'http://yahoo.com/')
>>> len(manager.pools)
2
data
1 proxy=None kind:data type:NoneType class:<class ‘urllib3.poolmanager.PoolManager’>
2 proxy_config=None kind:data type:NoneType class:<class ‘urllib3.poolmanager.PoolManager’>
method
3 clear(self)
kind=method class=PoolManager objtype=function line:216 at …\lib\site-packages\urllib3\poolmanager.py
清空我们储存的水池,命令它们全部关闭。
这不会影响飞行中的连接,但它们在完成后不会被重用。
4 connection_from_context(self, request_context)
kind=method class=PoolManager objtype=function line:248 at …\lib\site-packages\urllib3\poolmanager.py
获取:class:`urllib3.connectionpool.ConnectionPool`基于请求上下文。
``request_context`` 必须至少包含 ``scheme`` 键,并且它的值必须是 ``key_fn_by_scheme`` 实例变量中的一个键。
5 connection_from_host(self, host, port=None, scheme=“http”, pool_kwargs=None)
kind=method class=PoolManager objtype=function line:225 at …\lib\site-packages\urllib3\poolmanager.py
获取:class:`urllib3.connectionpool.ConnectionPool`,根据主机、端口和方案选择。
如果没有给出`port`,它将使用 ``urllib3.connectionpool.port_by_scheme``。
如果提供了``pool_kwargs``,它将与实例的 ``connection_pool_kw`` 变量合并,并用于创建新的连接池(如果需要的话)。
6 connection_from_pool_key(self, pool_key, request_context=None)
kind=method class=PoolManager objtype=function line:263 at …\lib\site-packages\urllib3\poolmanager.py
获取:class:`urllib3.connectionpool.ConnectionPool`,基于提供的池密钥。
``pool_key`` 应该是一个只包含不可变对象的命名元组。至少它必须有“scheme”、“host”和“port”字段。
7 connection_from_url(self, url, pool_kwargs=None)
kind=method class=PoolManager objtype=function line:287 at …\lib\site-packages\urllib3\poolmanager.py
类似于 :func:`urllib3.connectionpool.connection_from_url`。
如果没有提供 ``pool_kwargs``,并且需要构建一个新的池, ``self.connection_pool_kw`` 用于初始化:类:`urllib3.connectionpool.ConnectionPool`。
如果提供了``pool_kwargs``,则使用它代替。
请注意,如果不需要为请求创建新池,则不会使用提供的``pool_kwargs``。
8 urlopen(self, method, url, redirect=True, **kw)
kind=method class=PoolManager objtype=function line:353 at …\lib\site-packages\urllib3\poolmanager.py
与:meth:`urllib3.HTTPConnectionPool.urlopen`,使用自定义跨主机重定向逻辑,只发送 `url` 的请求uri部分。
给定的 `url` 参数必须是绝对的,这样一个合适的:class:`urllib3.connectionpool.`可以为它选择ConnectionPool。
🌿26 urllib3.poolmanager.ProxyManager
ProxyManager, urllib3.poolmanager.ProxyManager, module=urllib3.poolmanager, line:421 at site-packages\urllib3\poolmanager.py
行为就像:class:`PoolManager`,但通过定义的代理发送所有请求,使用HTTPS URL 的 CONNECT 方法。
:param proxy_url: 要使用的代理的url。
:param proxy_headers: 包含将发送给代理的头的字典。在HTTP的情况下,它们与每个请求一起发送,
而在HTTPS/CONNECT的情况下,它们只发送一次。可用于代理身份验证。
:param proxy_ssl_context: 代理SSL上下文用于在使用HTTPS代理时建立到代理的TLS连接。
:param use_forwarding_for_https: (默认为False)如果设置为True,将转发请求到代表客户端的https代理,而不是通过CONNECT方法创建TLS隧道。
**启用此标志意味着请求和响应头和内容将从HTTPS代理中可见**
而隧道则使请求和响应的报头和内容保持私有。
IP地址、目标主机名、SNI和端口对于HTTPS代理始终是可见的,即使禁用了此标志。
示例:
>>> proxy = urllib3.ProxyManager('http://localhost:3128/')
>>> r1 = proxy.request('GET', 'http://google.com/')
>>> r2 = proxy.request('GET', 'http://httpbin.org/')
>>> len(proxy.pools)
1
>>> r3 = proxy.request('GET', 'https://httpbin.org/')
>>> r4 = proxy.request('GET', 'https://twitter.com/')
>>> len(proxy.pools)
3
method
1 connection_from_host(self, host, port=None, scheme=“http”, pool_kwargs=None)
kind=method class=ProxyManager objtype=function line:498 at …\lib\site-packages\urllib3\poolmanager.py
2 urlopen(self, method, url, redirect=True, **kw)
kind=method class=ProxyManager objtype=function line:523 at …\lib\site-packages\urllib3\poolmanager.py
同HTTP(S)ConnectionPool.urlopen,``url`` 必须是绝对的。
🌿27 urllib3.response.HTTPResponse
HTTPResponse, urllib3.response.HTTPResponse, module=urllib3.response, line:163 at site-packages\urllib3\response.py
HTTP响应容器。
向后兼容:class:`http.client.HTTPResponse`, 但是当`data`属性被访问时,响应 `body` 被加载并按需解码。
这个类也与Python标准库的:mod:`io`模块兼容,因此可以在该框架的上下文中被视为可读对象。
在 :class:`http.client.HTTPResponse` 中不存在的行为.
:param preload_content: 如果为True,则响应体将在构造期间预加载。
:param decode_content: 如果为True,将尝试基于'content-encoding'报头解码正文。
:param original_response: 当这个包装器是从:class:`http.client.HTTPResponse`生成的对象,为了调试的目的,包含原始的是很方便的。除此之外,它是闲置的。
:param retries: 重试包含最后一个:class:`~urllib3.util.retry.Retry`。请求期间使用的“重试”。
:param enforce_content_length: 强制内容长度检查。服务器返回的正文必须匹配内容长度报头的值(如果存在)。否则,抛出错误。
data
1 CONTENT_DECODERS=[‘gzip’, ‘deflate’] kind:data type:list class:<class ‘urllib3.response.HTTPResponse’>
2 DECODER_ERROR_CLASSES=(<class ‘OSError’>, <class ‘zlib.error’>) kind:data type:tuple class:<class ‘urllib3.response.HTTPResponse’>
3 REDIRECT_STATUSES=[301, 302, 303, 307, 308] kind:data type:list class:<class ‘urllib3.response.HTTPResponse’>
property
4 closed=<property object at 0x00000252E8494048> kind:property type:property class:<class ‘urllib3.response.HTTPResponse’>
5 connection=<property object at 0x00000252E8492E08> kind:property type:property class:<class ‘urllib3.response.HTTPResponse’>
6 data=<property object at 0x00000252E8492DB8> kind:property type:property class:<class ‘urllib3.response.HTTPResponse’>
method
7 close(self)
kind=method class=HTTPResponse objtype=function line:689 at …\lib\site-packages\urllib3\response.py
8 drain_conn(self)
kind=method class=HTTPResponse objtype=function line:288 at …\lib\site-packages\urllib3\response.py
读取并丢弃响应连接中任何剩余的HTTP响应数据。
HTTPResponse连接中的未读数据阻止连接被释放回池。
9 fileno(self)
kind=method class=HTTPResponse objtype=function line:712 at …\lib\site-packages\urllib3\response.py
10 flush(self)
kind=method class=HTTPResponse objtype=function line:723 at …\lib\site-packages\urllib3\response.py
11 get_redirect_location(self)
kind=method class=HTTPResponse objtype=function line:268 at …\lib\site-packages\urllib3\response.py
我们应该重定向吗?
返回:如果我们有一个重定向状态码和有效的位置,真实的重定向位置字符串。
如果重定向状态没有位置,则返回`None`。如果不是重定向状态码,则为``False``。
12 getheader(self, name, default=None)
kind=method class=HTTPResponse objtype=function line:675 at …\lib\site-packages\urllib3\response.py
13 getheaders(self)
kind=method class=HTTPResponse objtype=function line:666 at …\lib\site-packages\urllib3\response.py
14 geturl(self)
kind=method class=HTTPResponse objtype=function line:859 at …\lib\site-packages\urllib3\response.py
返回作为此响应源的URL。
如果生成此响应的请求被重定向,则此方法将返回最终重定向位置。
15 info(self)
kind=method class=HTTPResponse objtype=function line:685 at …\lib\site-packages\urllib3\response.py
16 isclosed(self)
kind=method class=HTTPResponse objtype=function line:312 at …\lib\site-packages\urllib3\response.py
17 read(self, amt=None, decode_content=None, cache_content=False)
kind=method class=HTTPResponse objtype=function line:535 at …\lib\site-packages\urllib3\response.py
类似于 :meth:`http.client.HTTPResponse.read`,但有两个额外的参数:``decode_content``和 ``cache_content``。
:param amt: 要读取多少内容。如果指定,则跳过缓存,因为将部分内容缓存为完整响应是没有意义的。
:param decode_content: 如果为True,将尝试基于'content-encoding'报头解码正文。
:param cache_content: 如果为True,将保存返回的数据,以便无论底层文件对象的状态如何,都返回相同的结果。
如果您想要``.data``属性在拥有 ``.read()``文件对象后继续工作。(如果设置了``amt``将被重写。)
18 read_chunked(self, amt=None, decode_content=None)
kind=method class=HTTPResponse objtype=function line:789 at …\lib\site-packages\urllib3\response.py
类似于 :meth:`HTTPResponse.read`,但带有一个附加参数``decode_content``。
:param amt: 要读取多少内容。如果指定,则跳过缓存,因为将部分内容缓存为完整响应是没有意义的。
:param decode content: 如果为True,将尝试基于'content-encoding'报头解码正文。
19 readable(self)
kind=method class=HTTPResponse objtype=function line:731 at …\lib\site-packages\urllib3\response.py
20 readinto(self, b)
kind=method class=HTTPResponse objtype=function line:735 at …\lib\site-packages\urllib3\response.py
21 release_conn(self)
kind=method class=HTTPResponse objtype=function line:281 at …\lib\site-packages\urllib3\response.py
22 stream(self, amt=2 ** 16, decode_content=None)
kind=method class=HTTPResponse objtype=function line:607 at …\lib\site-packages\urllib3\response.py
read()方法的生成器包装器。调用将阻塞,直到从连接中读取“amt”字节或直到连接关闭。
:param amt: 要读取多少内容。生成器每次迭代将返回最多的数据,但可能返回的更少。
这在使用压缩数据时尤其可能。然而,空字符串将永远不会返回。
:param decode_content: 如果为True,将尝试基于'content-encoding'报头解码正文。
23 supports_chunked_reads(self)
kind=method class=HTTPResponse objtype=function line:744 at …\lib\site-packages\urllib3\response.py
检查底层类文件对象是否看起来像 :class:`http.client.HTTPResponse` 对象。
我们通过测试fp属性来做到这一点。如果它存在,我们假设它返回经过read_chunked()处理的原始块。
24 tell(self)
kind=method class=HTTPResponse objtype=function line:315 at …\lib\site-packages\urllib3\response.py
获得到目前为止通过线路传输的字节数。
可能与 :meth:``urllib3.response.HTTPResponse.read`` 返回的内容量不同, 如果字节是在线编码(例如,压缩)。
class method
25 from_httplib(ResponseCls, r, **response_kw)
kind=class method class=HTTPResponse objtype=classmethod line:634 at …\lib\site-packages\urllib3\response.py
将函数转换为类方法。
🌿28 urllib3.util.retry.Retry
Retry, urllib3.util.retry.Retry, module=urllib3.util.retry, line:92 at site-packages\urllib3\util\retry.py
重试配置。每次重试尝试都会创建一个具有更新值的新retry对象,因此可以安全地重用它们。
重试可以定义为池的默认值:
retries = Retry(connect=5, read=2, redirect=5)
http = PoolManager(retries=retries)
response = http.request('GET', 'http://example.com/')
或每个请求(覆盖池的默认值):
response = http.request('GET', 'http://example.com/', retries=Retry(10))
可以通过传递 `False` 来禁用重试:
response = http.request('GET', 'http://example.com/', retries=False)
错误将被包装在 :class:`~urllib3.exceptions.MaxRetryError`,除非重试被禁用,在这种情况下将引发异常。
:param int total: 允许的重试总数。优先于其他计数。
设置为“None”以删除此约束并返回到其他计数。
设置为“0”表示第一次重试失败。
设置为 ``False`` 来禁用并暗示``raise_on_redirect=False``。
:param int connect: 要重试的连接相关错误的个数。
这些错误是在请求发送到远程服务器之前引发的,我们假设远程服务器没有触发服务器处理请求。
设置为“0”表示此类型的第一次重试失败。
:param int read: 读取错误时重试的次数。这些错误是在请求发送到服务器之后引发的,因此请求可能有副作用。
设置为“0”表示此类型的第一次重试失败。
:param int: 执行多少重定向。限制它以避免无限重定向循环。重定向是一个HTTP响应,状态码为301、302、303、307或308。
设置为``0``表示此类型的第一次重试失败。设置为 `False` 以禁用并暗示``raise_on_redirect=False``。
:param int status: 错误状态码的重试次数。这些是对响应进行的重试,其中状态代码匹配“状态预测器”。设置为“0”表示此类型的第一次重试失败。
:param int other: 对其他错误重试多少次。其他错误是非连接、读取、重定向或状态错误。这些错误可能在请求被发送到服务器之后被引发,因此请求可能有副作用。
设置为“0”表示此类型的第一次重试失败。如果未设置“total”,则最好将其设置为0,以考虑意外的边缘情况并避免无限重试循环。
:param iterable allowed_methods: 我们应该重试的一组大写HTTP方法动词。默认情况下,我们只重试那些被认为是幂等的方法(具有相同参数的多个请求以相同的状态结束)。
参见 :attr:`Retry.DEFAULT_ALLOWED_METHODS`。
设置为“False”值以重试任何动词.
警告: 先前此参数被命名为``method_whitelist``,该用法在v1.26.0中已弃用,将在v2.0中删除。
:param iterable status_forcelist: 我们应该强制重试的一组整数HTTP状态码。如果请求方法在``allowed_methods`` 中,
并且响应状态码在``status_forcelist``中,则启动重试。默认情况下,使用`None` 禁用此功能。
:param float backoff_factor: 在第二次尝试之后的两次尝试之间应用的一个 backoff factor (大多数错误在第二次尝试后立即解决,没有延迟)。Urllib3将休眠:
{backoff factor} * (2 ** ({number of total retries} - 1))
秒。如果回退因子为0.1,则 :func:`.sleep` 会持续0秒、0.2秒、0.4秒……重试之间。
它永远不会超过 :attr:`Retry.DEFAULT_BACKOFF_MAX`。
默认情况下,backoff是禁用的(设置为0)
:param bool raise_on_redirect: 如果重定向的数量已经用尽,是否引发MaxRetryError,或者返回一个响应代码在3xx范围内的响应。
:param bool raise_on_status: 类似于``raise_on_redirect``, 如果状态落在``status_forcelist`` 范围内并且重试次数已用尽,我们是否应该引发异常或返回响应。
:param tuple history: 每次调用:meth:`~Retry.increment`时遇到的请求历史。该列表按照请求发生的顺序排列。每个列表项都属于类:class:`RequestHistory`。
:param bool respect_retry_after_header: 是否尊重定义为:attr:`Retry`的状态码的 Retry-After 报头。是否在状态码后重试。
:param iterable remove_headers_on_redirect: 在触发重定向请求之前,当指示重定向的响应返回时,从请求中删除的头序列。
data
1 DEFAULT=Retry(total=3, connect=None, read=None, redirect=None, status=None) kind:data type:Retry class:<class ‘urllib3.util.retry.Retry’>
2 DEFAULT_ALLOWED_METHODS=frozenset({‘HEAD’, ‘DELETE’, ‘OPTIONS’, ‘TRACE’, ‘GET’, ‘PUT’}) kind:data type:frozenset class:<class ‘urllib3.util.retry.Retry’>
3 DEFAULT_BACKOFF_MAX=120 kind:data type:int class:<class ‘urllib3.util.retry.Retry’>
4 DEFAULT_REMOVE_HEADERS_ON_REDIRECT=frozenset({‘Authorization’}) kind:data type:frozenset class:<class ‘urllib3.util.retry.Retry’>
5 RETRY_AFTER_STATUS_CODES=frozenset({503, 413, 429}) kind:data type:frozenset class:<class ‘urllib3.util.retry.Retry’>
method
6 get_backoff_time(self)
kind=method class=Retry objtype=function line:354 at …\lib\site-packages\urllib3\util\retry.py
计算当前backoff的公式:
:rtype: float
7 get_retry_after(self, response)
kind=method class=Retry objtype=function line:394 at …\lib\site-packages\urllib3\util\retry.py
以秒为单位获取Retry-After的值。
8 increment(
kind=method class=Retry objtype=function line:504 at …\lib\site-packages\urllib3\util\retry.py
返回一个具有递增重试计数器的新重试对象。
:param response: 响应对象,如果服务器没有返回响应,则为None。
:type response: :class:`~urllib3.response.HTTPResponse`
:param Exception error: 请求过程中遇到的错误,如果成功接收到响应则为None。
:return: 一个新的``Retry`` 对象。
9 is_exhausted(self)
kind=method class=Retry objtype=function line:488 at …\lib\site-packages\urllib3\util\retry.py
我们没有重试了吗?
10 is_retry(self, method, status_code, has_retry_after=False)
kind=method class=Retry objtype=function line:468 at …\lib\site-packages\urllib3\util\retry.py
此方法/状态码是否可重试?
(基于允许列表和控制变量,如允许的重试总数,是否尊重Retry-After报头,是否存在此报头,以及返回的状态码是否在状态码列表中,以便在出现上述报头时重试)
11 new(self, **kw)
kind=method class=Retry objtype=function line:304 at …\lib\site-packages\urllib3\util\retry.py
12 parse_retry_after(self, retry_after)
kind=method class=Retry objtype=function line:371 at …\lib\site-packages\urllib3\util\retry.py
13 sleep(self, response=None)
kind=method class=Retry objtype=function line:418 at …\lib\site-packages\urllib3\util\retry.py
在重试尝试之间休眠。
此方法将尊重服务器的``Retry-After``响应头,并在请求的时间内休眠。
如果不存在,它将使用指数回退。
默认情况下,回退因子为0,此方法将立即返回。
14 sleep_for_retry(self, response=None)
kind=method class=Retry objtype=function line:404 at …\lib\site-packages\urllib3\util\retry.py
class method
15 from_int(cls, retries, redirect=True, default=None)
kind=class method class=Retry objtype=classmethod line:341 at …\lib\site-packages\urllib3\util\retry.py
将函数转换为类方法。
🌿29 urllib3.util.timeout.Timeout
Timeout, urllib3.util.timeout.Timeout, module=urllib3.util.timeout, line:19 at site-packages\urllib3\util\timeout.py
超时配置。超时可以定义为池的默认值:
代码块: python
timeout = Timeout(connect=2.0, read=7.0)
http = PoolManager(timeout=timeout)
response = http.request('GET', 'http://example.com/')
或每个请求(覆盖池的默认值):
response = http.request('GET', 'http://example.com/', timeout=Timeout(10))
可以通过设置所有参数为`None`来禁用超时:
no_timeout = Timeout(connect=None, read=None)
response = http.request('GET', 'http://example.com/, timeout=no_timeout)
:param total: 将连接超时和读取超时合并为一个;读取超时将设置为连接尝试的剩余时间。
如果同时指定了连接超时和总超时,或者指定了读超时和总超时,则应用较短的超时。默认为None。
:type total: int, float, 或 None
:param connect: 连接到服务器成功等待的最大时间(以秒为单位)。省略该参数将使连接超时默认为系统默认值,可能是'[socket.py](<http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535)中的全局默认超时'。
None将为连接尝试设置无限超时。
:type connect: int, float或None
:param read: 在连续读取操作之间等待服务器响应的最大时间(以秒为单位)。
省略该参数将使读取超时默认为系统默认值,可能是'[socket.py](http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535)中的全局默认超时'。
None将设置无限超时。
:type read: int、float或None
注意: 许多因素会影响urllib3返回HTTP响应的总时间。
例如,Python的DNS解析器不遵守套接字上指定的超时。其他可能影响总请求时间的因素包括高CPU负载、高交换、以低优先级运行的程序或其他行为。
此外,读取超时和总超时仅衡量连接客户端和服务器的套接字上的读取操作之间的时间,而不是请求返回完整响应的总时间。
对于大多数请求,会引发超时,因为服务器没有在指定的时间内发送第一个字节。
情况并非总是如此;如果服务器每15秒流式传输一个字节,那么即使请求需要几分钟才能完成,也不会触发20秒的超时。
如果您的目标是在固定的挂钟时间后切断任何请求,请考虑使用第二个 "watcher" 线程来切断缓慢的请求。
data
1 DEFAULT_TIMEOUT=<object object at 0x00000252E6007FD0> kind:data type:object class:<class ‘urllib3.util.timeout.Timeout’>
property
2 connect_timeout=<property object at 0x00000252E8313BD8> kind:property type:property class:<class ‘urllib3.util.timeout.Timeout’>
3 read_timeout=<property object at 0x00000252E8313B38> kind:property type:property class:<class ‘urllib3.util.timeout.Timeout’>
method
4 clone(self)
kind=method class=Timeout objtype=function line:184 at …\lib\site-packages\urllib3\util\timeout.py
超时属性存储在每个池中,但每个请求都需要一个新的timeout对象,以确保每个请求都配置了自己的开始/停止。
:return: timeout对象的拷贝。
:rtype: :class:`Timeout`
5 get_connect_duration(self)
kind=method class=Timeout objtype=function line:209 at …\lib\site-packages\urllib3\util\timeout.py
获取调用:meth:`start_connect`后经过的时间。
:return: 以秒为单位的运行时间。
:rtype: float
:raises urllib3.exceptions.TimeoutStateError: 如果您试图获取尚未启动的计时器的持续时间。
6 start_connect(self)
kind=method class=Timeout objtype=function line:198 at …\lib\site-packages\urllib3\util\timeout.py
启动超时时钟,在connect()尝试期间使用。
:raises urllib3.exceptions.TimeoutStateError: 如果你试图启动一个已经启动的计时器。
class method
7 from_float(cls, timeout)
kind=class method class=Timeout objtype=classmethod line:169 at …\lib\site-packages\urllib3\util\timeout.py
将函数转换为类方法。
8 resolve_default_timeout(cls, timeout)
kind=class method class=Timeout objtype=classmethod line:119 at …\lib\site-packages\urllib3\util\timeout.py
将函数转换为类方法。
🔵私有或局部
30 _version <module ‘urllib3._version
from
…\lib\site-packages\urllib3_version.py’>
31 _collections <module ‘urllib3._collectionsfrom
…\lib\site-packages\urllib3_collections.py’>
🔵剩余
32 loader <_frozen_importlib_external.SourceFileLoader object at 0x00000252E6A7FD48>
33 spec ModuleSpec(name=‘urllib3’, loader=<frozen_importlib_external.SourceFileLoader object at 0x00000252E6A7FD48>, origin='…\lib\site-packages\urllib3_init.py’, submodule_search_locations=[‘…\lib\site-packages\urllib3’])
34 absolute_import _Feature((2, 5, 0, ‘alpha’, 1), (3, 0, 0, ‘alpha’, 0), 16384)
☘️【urllib3.contrib._appengine_environ】
_appengine_environ, fullname=urllib3.contrib._appengine_environ, file=urllib3\contrib_appengine_environ.py
这个模块提供了检测应用引擎环境的方法。
🔵统计
序号 | 类别 | 数量 |
---|---|---|
4 | str | 5 |
8 | dict | 1 |
9 | module | 1 |
11 | function | 5 |
13 | residual | 2 |
14 | system | 8 |
16 | all | 14 |
🔵模块
🌿1 os
os, fullname=os, file=os.py
🔵函数
🌿2 is_appengine()
is_appengine(), module=urllib3.contrib._appengine_environ, line:8 at site-packages\urllib3\contrib_appengine_environ.py
🌿3 is_appengine_sandbox()
is_appengine_sandbox(), module=urllib3.contrib._appengine_environ, line:12 at site-packages\urllib3\contrib_appengine_environ.py
报告应用程序是否在第一代沙盒中运行。
从技术上讲,第二代运行时仍然在沙盒中,但它的限制要少得多,因此通常不需要检查它。[参见](https://cloud.google.com/appengine/docs/standard/runtimes)
🌿4 is_local_appengine()
is_local_appengine(), module=urllib3.contrib._appengine_environ, line:22 at site-packages\urllib3\contrib_appengine_environ.py
🌿5 is_prod_appengine()
is_prod_appengine(), module=urllib3.contrib._appengine_environ, line:28 at site-packages\urllib3\contrib_appengine_environ.py
🌿6 is_prod_appengine_mvms()
is_prod_appengine_mvms(), module=urllib3.contrib._appengine_environ, line:34 at site-packages\urllib3\contrib_appengine_environ.py
弃用
☘️【urllib3.util.wait】
wait, fullname=urllib3.util.wait, file=urllib3\util\wait.py
🔵统计
序号 | 类别 | 数量 |
---|---|---|
4 | str | 4 |
6 | list | 1 |
8 | dict | 1 |
9 | module | 3 |
10 | class | 2 |
11 | function | 8 |
12 | builtin_function_or_method | 1 |
13 | residual | 3 |
14 | system | 9 |
15 | private | 2 |
16 | all | 23 |
🔵模块
🌿1 errno
errno, fullname=errno
🌿2 select
select, fullname=select, file=select.pyd
🌿3 sys
sys, fullname=sys
🔵函数
🌿4 _retry_on_intr(fn, timeout)
_retry_on_intr(fn, timeout), module=urllib3.util.wait, line:42 at site-packages\urllib3\util\wait.py
🌿5 select_wait_for_socket(sock, read=False, write=False, timeout=None)
select_wait_for_socket(sock, read=False, write=False, timeout=None), module=urllib3.util.wait, line:70 at site-packages\urllib3\util\wait.py
🌿6 poll_wait_for_socket(sock, read=False, write=False, timeout=None)
poll_wait_for_socket(sock, read=False, write=False, timeout=None), module=urllib3.util.wait, line:89 at site-packages\urllib3\util\wait.py
🌿7 null_wait_for_socket(*args, **kwargs)
null_wait_for_socket(*args, **kwargs), module=urllib3.util.wait, line:109 at site-packages\urllib3\util\wait.py
🌿8 _have_working_poll()
_have_working_poll(), module=urllib3.util.wait, line:113 at site-packages\urllib3\util\wait.py
🌿9 select_wait_for_socket(sock, read=False, write=False, timeout=None)
select_wait_for_socket(sock, read=False, write=False, timeout=None), module=urllib3.util.wait, line:70 at site-packages\urllib3\util\wait.py
🌿10 wait_for_read(sock, timeout=None)
wait_for_read(sock, timeout=None), module=urllib3.util.wait, line:141 at site-packages\urllib3\util\wait.py
等待给定套接字上可用的读取。如果套接字可读则返回True,如果超时则返回False。
🌿11 wait_for_write(sock, timeout=None)
wait_for_write(sock, timeout=None), module=urllib3.util.wait, line:148 at site-packages\urllib3\util\wait.py
等待给定套接字上可用的写入。如果套接字可读则返回True,如果超时则返回False。
🔵类
🌿12 functools.partial
partial, functools.partial, module=functools, line:234 at functools.py
partia (func, *args, **keywords) -部分应用给定参数和关键字的新函数。
data
1 args=<member ‘args
of
functools.partial’ objects> kind:data type:member_descriptor class:<class ‘functools.partial’>
2 func=<member ‘funcof
functools.partial’ objects> kind:data type:member_descriptor class:<class ‘functools.partial’>
3 keywords=<member ‘keywordsof
functools.partial’ objects> kind:data type:member_descriptor class:<class ‘functools.partial’>
🌿13 urllib3.util.wait.NoWayToWaitForSocketError
NoWayToWaitForSocketError, urllib3.util.wait.NoWayToWaitForSocketError, module=urllib3.util.wait, line:14 at site-packages\urllib3\util\wait.py
🔵内嵌函数或方法
14 monotonic
🔵私有或局部
15 _retry_on_intr <function _retry_on_intr at 0x00000252E83F9F78>
16 _have_working_poll <function _have_working_poll at 0x00000252E8400B88>
☘️【urllib3.util.retry】
retry, fullname=urllib3.util.retry, file=urllib3\util\retry.py
🔵统计
序号 | 类别 | 数量 |
---|---|---|
4 | str | 4 |
8 | dict | 1 |
9 | module | 6 |
10 | class | 11 |
11 | function | 1 |
13 | residual | 6 |
14 | system | 8 |
15 | private | 2 |
16 | all | 29 |
🔵模块
🌿1 email
email, fullname=email, file=email_init_.py
🌿2 logging
logging, fullname=logging, file=logging_init_.py
🌿3 re
re, fullname=re, file=re.py
🌿4 time
time, fullname=time
🌿5 warnings
warnings, fullname=warnings, file=warnings.py
🌿6 urllib3.packages.six
six, fullname=urllib3.packages.six, file=urllib3\packages\six.py
🔵函数
🌿7 namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
namedtuple(typename, field_names, *, rename=False, defaults=None, module=None), module=collections, line:316 at collections_init_.py
返回具有命名字段的元组的新子类。
>>> Point = namedtuple('Point', ['x', 'y'])
>>> Point.__doc__ # docstring for the new class
'Point(x, y)'
>>> p = Point(11, y=22) # instantiate with positional args or keywords
>>> p[0] + p[1] # indexable like a plain tuple
33
>>> x, y = p # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y # fields also accessible by name
33
>>> d = p._asdict() # convert to a dictionary
>>> d['x']
11
>>> Point(**d) # convert from a dictionary
Point(x=11, y=22)
>>> p._replace(x=100) # _replace() is like str.replace() but targets named fields
Point(x=100, y=22)
🔵类
🌿8 itertools.takewhile
takewhile, itertools.takewhile, module=itertools, line:0 at
takewhile(predicate, iterable) -> takewhile object
返回可迭代对象的连续条目,只要谓词对每个条目的计算结果为true。
🌿9 urllib3.exceptions.ConnectTimeoutError
ConnectTimeoutError, urllib3.exceptions.ConnectTimeoutError, module=urllib3.exceptions, line:128 at site-packages\urllib3\exceptions.py
当连接到服务器时出现套接字超时时引发
🌿10 urllib3.exceptions.InvalidHeader
InvalidHeader, urllib3.exceptions.InvalidHeader, module=urllib3.exceptions, line:280 at site-packages\urllib3\exceptions.py
所提供的标头不知何故无效。
🌿11 urllib3.exceptions.MaxRetryError
MaxRetryError, urllib3.exceptions.MaxRetryError, module=urllib3.exceptions, line:77 at site-packages\urllib3\exceptions.py
当超过重试的最大次数时引发。
:param pool: 连接池
:type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool`
:param string url: 请求 Url
:param exceptions.Exception reason: 底层错误
🌿12 urllib3.exceptions.ProtocolError
ProtocolError, urllib3.exceptions.ProtocolError, module=urllib3.exceptions, line:64 at site-packages\urllib3\exceptions.py
在请求/响应过程中发生意外时引发。
🌿13 urllib3.exceptions.ProxyError
ProxyError, urllib3.exceptions.ProxyError, module=urllib3.exceptions, line:50 at site-packages\urllib3\exceptions.py
当与代理的连接失败时引发。
🌿14 urllib3.exceptions.ReadTimeoutError
ReadTimeoutError, urllib3.exceptions.ReadTimeoutError, module=urllib3.exceptions, line:120 at site-packages\urllib3\exceptions.py
当从服务器接收数据时发生套接字超时时引发
🌿15 urllib3.exceptions.ResponseError
ResponseError, urllib3.exceptions.ResponseError, module=urllib3.exceptions, line:178 at site-packages\urllib3\exceptions.py
用作MaxRetryError中提供的错误原因的容器。
data
1 GENERIC_ERROR=too many error responses kind:data type:str class:<class ‘urllib3.exceptions.ResponseError’>
2 SPECIFIC_ERROR=too many {status_code} error responses kind:data type:str class:<class ‘urllib3.exceptions.ResponseError’>
🌿16 urllib3.util.retry.RequestHistory
RequestHistory, urllib3.util.retry.RequestHistory, module=urllib3.util.retry, line:-1 at site-packages\urllib3\util\retry.py
RequestHistory(method, url, error, status, redirect_location)
property
1 error=<property object at 0x00000252E8409C78> kind:property type:property class:<class ‘urllib3.util.retry.RequestHistory’>
2 method=<property object at 0x00000252E8409BD8> kind:property type:property class:<class ‘urllib3.util.retry.RequestHistory’>
3 redirect_location=<property object at 0x00000252E8409D18> kind:property type:property class:<class ‘urllib3.util.retry.RequestHistory’>
4 status=<property object at 0x00000252E8409CC8> kind:property type:property class:<class ‘urllib3.util.retry.RequestHistory’>
5 url=<property object at 0x00000252E8409C28> kind:property type:property class:<class ‘urllib3.util.retry.RequestHistory’>
🌿17 urllib3.util.retry._RetryMeta
_RetryMeta, urllib3.util.retry._RetryMeta, module=urllib3.util.retry, line:35 at site-packages\urllib3\util\retry.py
property
1 BACKOFF_MAX=<property object at 0x00000252E8409EF8> kind:property type:property class:<class ‘urllib3.util.retry._RetryMeta’>
2 DEFAULT_METHOD_WHITELIST=<property object at 0x00000252E8409E58> kind:property type:property class:<class ‘urllib3.util.retry._RetryMeta’>
3 DEFAULT_REDIRECT_HEADERS_BLACKLIST=<property object at 0x00000252E8409EA8> kind:property type:property class:<class ‘urllib3.util.retry._RetryMeta’>
🌿18 urllib3.util.retry.Retry
Retry, urllib3.util.retry.Retry, module=urllib3.util.retry, line:92 at site-packages\urllib3\util\retry.py
🔵私有或局部
18 _Default <object object at 0x00000252E83533C0>
19 _RetryMeta <class ‘urllib3.util.retry._RetryMeta’>
🔵剩余
20 doc
21 loader <_frozen_importlib_external.SourceFileLoader object at 0x00000252E8401508>
22 spec ModuleSpec(name=‘urllib3.util.retry’, loader=<_frozen_importlib_external.SourceFileLoader object at 0x00000252E8401508>, origin=‘…\lib\site-packages\urllib3\util\retry.py’)
23 absolute_import _Feature((2, 5, 0, ‘alpha’, 1), (3, 0, 0, ‘alpha’, 0), 16384)
24 log <Logger urllib3.util.retry (WARNING)>
25 _Default <object object at 0x00000252E83533C0>
☘️【urllib3.util.url】
url, fullname=urllib3.util.url, file=urllib3\util\url.py
🔵统计
序号 | 类别 | 数量 |
---|---|---|
4 | str | 13 |
5 | tuple | 1 |
6 | list | 2 |
7 | set | 6 |
8 | dict | 2 |
9 | module | 2 |
10 | class | 2 |
11 | function | 9 |
13 | residual | 14 |
14 | system | 8 |
15 | private | 9 |
16 | all | 51 |
🔵常量
🌿str
1 IPV4_PAT (?:[0-9]{1,3}.){3}[0-9]{1,3}
2 HEX_PAT [0-9A-Fa-f]{1,4}
3 LS32_PAT (?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]{1,3}.){3}[0-9]{1,3})
4 UNRESERVED_PAT ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-~
5 IPV6_PAT (?😦?:[0-9A-Fa-f]{1,4}😃{6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]{1,3}.){3}[0-9]{1,3})|:😦?:[0-9A-Fa-f]{1,4}😃{5…
6 ZONE_ID_PAT (?:%25|%)(?:[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-~]|%[a-fA-F0-9]{2})+
7 IPV6_ADDRZ_PAT [(?😦?:[0-9A-Fa-f]{1,4}😃{6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]{1,3}.){3}[0-9]{1,3})|:😦?:[0-9A-Fa-f]{1,4}😃…
8 REG_NAME_PAT (?:[^[]%😕?#]|%[a-fA-F0-9]{2})*
9 _HOST_PORT_PAT ((?:[[]%😕?#]|%[a-fA-F0-9]{2})*|(?:[0-9]{1,3}.){3}[0-9]{1,3}|[(?😦?:[0-9A-Fa-f]{1,4}😃{6}(?:[0-9A-Fa-f]{1,4}:[0-9A…
🌿tuple
10 NORMALIZABLE_SCHEMES (‘http’, ‘https’, None)
🌿list
11 url_attrs [‘scheme’, ‘auth’, ‘host’, ‘port’, ‘path’, ‘query’, ‘fragment’]
12 _variations [‘(?:%(hex)s:){6}%(ls32)s’, ‘:😦?:%(hex)s:){5}%(ls32)s’, ‘(?:%(hex)s)?:😦?:%(hex)s:){4}%(ls32)s’, '(?😦?:%(hex)s:)?%(hex…
🌿set
13 UNRESERVED_CHARS {‘a’, ‘I’, ‘w’, ‘A’, ‘S’, ‘G’, ‘Z’, ‘n’, ‘t’, ‘O’, ‘o’, ‘U’, ‘h’, ‘m’, ‘K’, ‘s’, ‘v’, ‘4’, ‘9’, ‘F’, ‘u’, ‘3’, ‘c’, ‘H’,…
14 SUB_DELIM_CHARS {‘$’, ‘&’, ‘;’, ‘!’, ‘(’, ‘*’, ‘+’, “'”, ‘,’, ‘=’, ‘)’}
15 USERINFO_CHARS {‘a’, ‘I’, ‘w’, ‘A’, ‘S’, ‘G’, ‘Z’, ‘N’, ‘t’, ‘,’, ‘o’, ‘U’, ‘h’, ‘4’, ‘F’, ‘3’, ‘7’, ‘H’, ‘f’, ‘e’, ‘Y’, ‘W’, ‘-’, ‘)’,…
16 PATH_CHARS {‘a’, ‘I’, ‘w’, ‘A’, ‘S’, ‘G’, ‘Z’, ‘N’, ‘t’, ‘,’, ‘o’, ‘U’, ‘h’, ‘4’, ‘F’, ‘3’, ‘7’, ‘H’, ‘f’, ‘e’, ‘Y’, ‘W’, ‘-’, ‘)’,…
17 QUERY_CHARS {‘a’, ‘I’, ‘w’, ‘A’, ‘S’, ‘G’, ‘Z’, ‘N’, ‘t’, ‘,’, ‘o’, ‘U’, ‘h’, ‘4’, ‘F’, ‘3’, ‘7’, ‘H’, ‘f’, ‘e’, ‘Y’, ‘W’, ‘-’, ‘)’,…
18 FRAGMENT_CHARS {‘a’, ‘I’, ‘w’, ‘A’, ‘S’, ‘G’, ‘Z’, ‘N’, ‘t’, ‘,’, ‘o’, ‘U’, ‘h’, ‘4’, ‘F’, ‘3’, ‘7’, ‘H’, ‘f’, ‘e’, ‘Y’, ‘W’, ‘-’, ‘)’,…
🌿dict
19 _subs {‘hex’: ‘[0-9A-Fa-f]{1,4}’, ‘ls32’: ‘(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]{1,3}.){3}[0-9]{1,3})’}
🔵模块
🌿20 re
re, fullname=re, file=re.py
🌿21 urllib3.packages.six
six, fullname=urllib3.packages.six, file=urllib3\packages\six.py
🔵函数
🌿22 namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
namedtuple(typename, field_names, *, rename=False, defaults=None, module=None), module=collections, line:316 at collections_init_.py
返回具有命名字段的元组的新子类。
>>> Point = namedtuple('Point', ['x', 'y'])
>>> Point.__doc__ # docstring for the new class
'Point(x, y)'
>>> p = Point(11, y=22) # instantiate with positional args or keywords
>>> p[0] + p[1] # indexable like a plain tuple
33
>>> x, y = p # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y # fields also accessible by name
33
>>> d = p._asdict() # convert to a dictionary
>>> d['x']
11
>>> Point(**d) # convert from a dictionary
Point(x=11, y=22)
>>> p._replace(x=100) # _replace() is like str.replace() but targets named fields
Point(x=100, y=22)
🌿23 split_first(s, delims)
split_first(s, delims), module=urllib3.util.url, line:175 at site-packages\urllib3\util\url.py
弃用: 1.25
给定一个字符串和一个可迭代的分隔符,在第一个找到的分隔符上分割。返回两个分割的部分和匹配的分隔符。
如果没有找到,那么第一部分就是完整的输入字符串。
例子:
>>> split_first('foo/bar?baz', '?/=')
('foo', 'bar?baz', '/')
>>> split_first('foo/bar?baz', '123')
('foo/bar?baz', '', None)
与递进数成线性比例。对于大量delims来说不理想。
🌿24 _encode_invalid_chars(component, allowed_chars, encoding=‘utf-8’)
_encode_invalid_chars(component, allowed_chars, encoding=‘utf-8’), module=urllib3.util.url, line:210 at site-packages\urllib3\util\url.py
对URI组件进行百分比编码,而无需重新应用于已经进行百分比编码的组件。
🌿25 _remove_path_dot_segments(path)
_remove_path_dot_segments(path), module=urllib3.util.url, line:244 at site-packages\urllib3\util\url.py
🌿26 _normalize_host(host, scheme)
_normalize_host(host, scheme), module=urllib3.util.url, line:274 at site-packages\urllib3\util\url.py
🌿27 _idna_encode(name)
_idna_encode(name), module=urllib3.util.url, line:305 at site-packages\urllib3\util\url.py
🌿28 _encode_target(target)
_encode_target(target), module=urllib3.util.url, line:323 at site-packages\urllib3\util\url.py
对请求目标进行百分比编码,以便没有无效字符
🌿29 parse_url(url)
parse_url(url), module=urllib3.util.url, line:333 at site-packages\urllib3\util\url.py
给定一个url,返回一个解析过的:class:`.Url`命名元组。
尽最大努力解析不完整的url。未提供的字段将为None。
该解析器兼容RFC 3986和RFC 6874。
解析器逻辑和辅助函数在很大程度上基于 ``rfc3986`` 模块中完成的工作。
:param str url: URL解析为:class:`.Url` 命名元组。
部分向后兼容:mod:`urlparse`。
例子:
>>> parse_url('http://google.com/mail/')
Url(scheme='http', host='google.com', port=None, path='/mail/', ...)
>>> parse_url('google.com:80')
Url(scheme=None, host='google.com', port=80, path=None, ...)
>>> parse_url('/foo?bar')
Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...)
🌿30 get_host(url)
get_host(url), module=urllib3.util.url, line:430 at site-packages\urllib3\util\url.py
弃用。使用:func:`parse_url`代替。
🔵类
🌿31 urllib3.exceptions.LocationParseError
LocationParseError, urllib3.exceptions.LocationParseError, module=urllib3.exceptions, line:158 at site-packages\urllib3\exceptions.py
当get_host或类似程序解析URL输入失败时引发。
🌿32 urllib3.util.url.Url
Url, urllib3.util.url.Url, module=urllib3.util.url, line:82 at site-packages\urllib3\util\url.py
表示HTTP URL的数据结构。用作:func:`parse_url`的返回值。
根据RFC 3986,模式和主机都是标准化的,因为它们都不区分大小写。
property
1 hostname=<property object at 0x00000252E8420B88> kind:property type:property class:<class ‘urllib3.util.url.Url’>
2 netloc=<property object at 0x00000252E8420CC8> kind:property type:property class:<class ‘urllib3.util.url.Url’>
3 request_uri=<property object at 0x00000252E8420C28> kind:property type:property class:<class ‘urllib3.util.url.Url’>
4 url=<property object at 0x00000252E8420278> kind:property type:property class:<class ‘urllib3.util.url.Url’>
🔵私有或局部
33 _subs {‘hex’: ‘[0-9A-Fa-f]{1,4}’, ‘ls32’: ‘(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]{1,3}.){3}[0-9]{1,3})’}
34 _variations [‘(?:%(hex)s:){6}%(ls32)s’, ‘:😦?:%(hex)s:){5}%(ls32)s’, ‘(?:%(hex)s)?:😦?:%(hex)s:){4}%(ls32)s’, '(?😦?:%(hex)s:)?%(hex…
35 _HOST_PORT_PAT ((?:[[]%😕?#]|%[a-fA-F0-9]{2})|(?:[0-9]{1,3}.){3}[0-9]{1,3}|[(?😦?:[0-9A-Fa-f]{1,4}😃{6}(?:[0-9A-Fa-f]{1,4}:[0-9A…
36 _HOST_PORT_RE re.compile('((?:[[]%😕?#]|%[a-fA-F0-9]{2})|(?:[0-9]{1,3}.){3}[0-9]{1,3}|[(?😦?:[0-9A-Fa-f]{1,4}😃{6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]{1,3}.){3}[0-9]{1,3})|:😦?:[0-9A-Fa-f]{1,4}😃{5}(?:[0, re.DOTALL)
37 _encode_invalid_chars <function _encode_invalid_chars at 0x00000252E8317678>
38 _remove_path_dot_segments <function _remove_path_dot_segments at 0x00000252E83175E8>
39 _normalize_host <function _normalize_host at 0x00000252E8317558>
40 _idna_encode <function _idna_encode at 0x00000252E83174C8>
41 _encode_target <function _encode_target at 0x00000252E8317438>
🔵剩余
42 doc
43 loader <_frozen_importlib_external.SourceFileLoader object at 0x00000252E8417788>
44 spec ModuleSpec(name=‘urllib3.util.url’, loader=<_frozen_importlib_external.SourceFileLoader object at 0x00000252E8417788>, origin=‘…\lib\site-packages\urllib3\util\url.py’)
45 absolute_import _Feature((2, 5, 0, ‘alpha’, 1), (3, 0, 0, ‘alpha’, 0), 16384)
46 PERCENT_RE re.compile(‘%[a-fA-F0-9]{2}’)
47 SCHEME_RE re.compile(‘^(?:[a-zA-Z][a-zA-Z0-9±]😐/)‘)
48 URI_RE re.compile(’(?😦[a-zA-Z][a-zA-Z0-9+.-]*)😃?(?😕/([\/?#]))?([?#]*)(?:?([#]))?(?:#(.))?KaTeX parse error: Expected 'EOF', got '#' at position 46: …compile('^(/[^?#̲]*)(?:\?([^#]*)…’)
50 IPV4_RE re.compile(‘^(?:[0-9]{1,3}.){3}[0-9]{1,3}KaTeX parse error: Undefined control sequence: \[ at position 256: …E re.compile('^\̲[̲(?:(?:[0-9A-Fa-…’)
55 _HOST_PORT_RE re.compile('((?:[[]%😕?#]|%[a-fA-F0-9]{2})*|(?:[0-9]{1,3}.){3}[0-9]{1,3}|[(?😦?:[0-9A-Fa-f]{1,4}😃{6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]{1,3}.){3}[0-9]{1,3})|:😦?:[0-9A-Fa-f]{1,4}😃{5}(?:[0, re.DOTALL)
☘️【urllib3.util.ssltransport】
ssltransport, fullname=urllib3.util.ssltransport, file=urllib3\util\ssltransport.py
🔵统计
序号 | 类别 | 数量 |
---|---|---|
1 | int | 1 |
4 | str | 4 |
8 | dict | 1 |
9 | module | 4 |
10 | class | 2 |
13 | residual | 3 |
14 | system | 8 |
16 | all | 15 |
🔵常量
🌿int
1 SSL_BLOCKSIZE 16384
🔵模块
🌿2 io
io, fullname=io, file=io.py
🌿3 socket
socket, fullname=socket, file=socket.py
🌿4 ssl
ssl, fullname=ssl, file=ssl.py
🌿5 urllib3.packages.six
six, fullname=urllib3.packages.six, file=urllib3\packages\six.py
🔵类
🌿6 urllib3.exceptions.ProxySchemeUnsupported
ProxySchemeUnsupported, urllib3.exceptions.ProxySchemeUnsupported, module=urllib3.exceptions, line:306 at site-packages\urllib3\exceptions.py
不支持通过HTTPS代理获取HTTPS资源
🌿7 urllib3.util.ssltransport.SSLTransport
SSLTransport, urllib3.util.ssltransport.SSLTransport, module=urllib3.util.ssltransport, line:11 at site-packages\urllib3\util\ssltransport.py
SSLTransport封装现有套接字并建立SSL连接。
与Python的SSLSocket实现相反,它允许您将多个TLS连接链接在一起。
如果您需要在TLS中实现TLS,那么它特别有用。该类支持大多数套接字API操作。
method
1 cipher(self)
kind=method class=SSLTransport objtype=function line:162 at …\lib\site-packages\urllib3\util\ssltransport.py
2 close(self)
kind=method class=SSLTransport objtype=function line:153 at …\lib\site-packages\urllib3\util\ssltransport.py
3 compression(self)
kind=method class=SSLTransport objtype=function line:174 at …\lib\site-packages\urllib3\util\ssltransport.py
4 fileno(self)
kind=method class=SSLTransport objtype=function line:69 at …\lib\site-packages\urllib3\util\ssltransport.py
5 getpeercert(self, binary_form=False)
kind=method class=SSLTransport objtype=function line:156 at …\lib\site-packages\urllib3\util\ssltransport.py
6 gettimeout(self)
kind=method class=SSLTransport objtype=function line:180 at …\lib\site-packages\urllib3\util\ssltransport.py
7 makefile(
kind=method class=SSLTransport objtype=function line:105 at …\lib\site-packages\urllib3\util\ssltransport.py
Python的httpclient在读取HTTP消息时使用makefile和buffered io,我们需要支持它。
不幸的是,这是对socket.py makefile的复制和粘贴,只做了一些小的修改,直接指向套接字。
8 read(self, len=1024, buffer=None)
kind=method class=SSLTransport objtype=function line:72 at …\lib\site-packages\urllib3\util\ssltransport.py
9 recv(self, len=1024, flags=0)
kind=method class=SSLTransport objtype=function line:75 at …\lib\site-packages\urllib3\util\ssltransport.py
10 recv_into(self, buffer, nbytes=None, flags=0)
kind=method class=SSLTransport objtype=function line:80 at …\lib\site-packages\urllib3\util\ssltransport.py
11 selected_alpn_protocol(self)
kind=method class=SSLTransport objtype=function line:165 at …\lib\site-packages\urllib3\util\ssltransport.py
12 selected_npn_protocol(self)
kind=method class=SSLTransport objtype=function line:168 at …\lib\site-packages\urllib3\util\ssltransport.py
13 send(self, data, flags=0)
kind=method class=SSLTransport objtype=function line:99 at …\lib\site-packages\urllib3\util\ssltransport.py
14 sendall(self, data, flags=0)
kind=method class=SSLTransport objtype=function line:89 at …\lib\site-packages\urllib3\util\ssltransport.py
15 settimeout(self, value)
kind=method class=SSLTransport objtype=function line:177 at …\lib\site-packages\urllib3\util\ssltransport.py
16 shared_ciphers(self)
kind=method class=SSLTransport objtype=function line:171 at …\lib\site-packages\urllib3\util\ssltransport.py
17 unwrap(self)
kind=method class=SSLTransport objtype=function line:150 at …\lib\site-packages\urllib3\util\ssltransport.py
18 version(self)
kind=method class=SSLTransport objtype=function line:159 at …\lib\site-packages\urllib3\util\ssltransport.py
☘️【urllib3.util.ssl_】
ssl_, fullname=urllib3.util.ssl_, file=urllib3\util\ssl_.py
🔵统计
序号 | 类别 | 数量 |
---|---|---|
2 | bool | 3 |
4 | str | 5 |
6 | list | 1 |
8 | dict | 2 |
9 | module | 6 |
10 | class | 6 |
11 | function | 10 |
12 | builtin_function_or_method | 6 |
13 | residual | 14 |
14 | system | 8 |
15 | private | 4 |
16 | all | 53 |
🔵常量
🌿bool
1 HAS_SNI True
2 IS_PYOPENSSL False
3 IS_SECURETRANSPORT False
🌿str
4 DEFAULT_CIPHERS ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20:ECDH+AESGCM:DH+AESGCM:ECDH+AES:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!eNU…
🌿list
5 ALPN_PROTOCOLS [‘http/1.1’]
🌿dict
6 HASHFUNC_MAP {32: , 40: , 64: }
🔵模块
🌿7 hmac
hmac, fullname=hmac, file=hmac.py
🌿8 os
os, fullname=os, file=os.py
🌿9 sys
sys, fullname=sys
🌿10 warnings
warnings, fullname=warnings, file=warnings.py
🌿11 urllib3.packages.six
six, fullname=urllib3.packages.six, file=urllib3\packages\six.py
🌿12 ssl
ssl, fullname=ssl, file=ssl.py
🔵函数
🌿13 _const_compare_digest_backport(a, b)
const_compare_digest_backport(a, b), module=urllib3.util.ssl, line:30 at site-packages\urllib3\util\ssl_.py
比较常数时间内长度相等的两个摘要。
摘要类型必须为str/bytes。
如果摘要匹配返回True,否则返回False。
🌿14 wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=<VerifyMode.CERT_NONE: 0>, ssl_version=<_SSLMethod.PROTOCOL_TLS: 2>, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None)
wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=<VerifyMode.CERT_NONE: 0>, ssl_version=<_SSLMethod.PROTOCOL_TLS: 2>, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None), module=ssl, line:1215 at ssl.py
🌿15 assert_fingerprint(cert, fingerprint)
assert_fingerprint(cert, fingerprint), module=urllib3.util.ssl_, line:182 at site-packages\urllib3\util\ssl_.py
检查给定的指纹是否与提供的证书匹配。
:param cert: 证书为字节对象。
:param fingerprint: 指纹为十六进制字符串,可以用冒号隔开。
🌿16 resolve_cert_reqs(candidate)
resolve_cert_reqs(candidate), module=urllib3.util.ssl_, line:211 at site-packages\urllib3\util\ssl_.py
将参数解析为一个数字常量,该常量可以从ssl模块传递给wrap套接字函数/方法。
默认为 :data:`ssl.CERT_REQUIRED`。
如果给定一个字符串,则假定它是:mod:`ssl`模块中常量的名称或其缩写。
(因此您可以指定“REQUIRED”而不是“CERT_REQUIRED”。
如果它既不是`None`也不是字符串,我们假设它已经是可以直接传递给wrap套接字的数字常量。
🌿17 resolve_ssl_version(candidate)
resolve_ssl_version(candidate), module=urllib3.util.ssl_, line:234 at site-packages\urllib3\util\ssl_.py
比如解析证书请求
🌿18 create_urllib3_context(ssl_version=None, cert_reqs=None, options=None, ciphers=None)
create_urllib3_context(ssl_version=None, cert_reqs=None, options=None, ciphers=None), module=urllib3.util.ssl_, line:250 at site-packages\urllib3\util\ssl_.py
所有参数的含义都与 ``ssl_wrap_socket``相同。
默认情况下,这个函数做了很多与在Python 3.4+上r ``ssl.create_default_context`` 相同的工作。它:
—禁用SSLv2、SSLv3和压缩
—设置一组受限制的服务器密码
如果您希望启用SSLv3,您可以:
from urllib3.util import ssl_
context = ssl_.create_urllib3_context()
context.options &= ~ssl_.OP_NO_SSLv3
你可以做同样的事情来启用压缩(替换 ``COMPRESSION`` 对于上面最后一行中的 `SSLv3` )。
:param ssl_version: 需要使用的协议版本。这将默认为PROTOCOL_SSLv23,它将协商服务器和您的OpenSSL安装支持的最高协议。
:param cert_reqs: 是否需要证书验证。默认为“``ssl.CERT_REQUIRED``。
:param options: 指定的OpenSSL选项。这些默认为``ssl.OP_NO_SSLv2``, ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION`` 和 ``ssl.OP_NO_TICKET``。
:param ciphers: 允许服务器选择的密码套件。
:返回: 构造的带有指定选项的SSLContext对象
:rtype: SSLContext
🌿19 ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None, ca_certs=None, server_hostname=None, ssl_version=None, ciphers=None, ssl_context=None, ca_cert_dir=None, key_password=None, ca_cert_data=None, tls_in_tls=False)
ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None, ca_certs=None, server_hostname=None, ssl_version=None, ciphers=None, ssl_context=None, ca_cert_dir=None, key_password=None, ca_cert_data=None, tls_in_tls=False), module=urllib3.util.ssl_, line:355 at site-packages\urllib3\util\ssl_.py
除了 server_hostname, ssl_context, 和 ca_cert_dir 之外,所有参数的含义都与使用 :func:`ssl.wrap_socket`。
:param server_hostname: 当支持SNI时,证书的预期主机名
:param ssl_context: 一个预制的:class:`SSLContext`对象。如果没有提供,将使用:func:`create_urllib3_context '创建一个。
:param ciphers: 我们希望客户端支持的一串密码。
:param ca_cert_dir: 一个包含多个独立文件中的CA证书的目录,由OpenSSL的-CApath标志或 SSLContext.load_verify_locations(). 的capath参数支持。
:param key password: 加密时可选密码。
:param ca_cert_data: 可选字符串,包含PEM格式的ca证书,适合作为数据参数传递给SSLContext.load_verify_locations()。
:param tls_in_tls: 使用SSLTransport封装现有套接字。
🌿20 is_ipaddress(hostname)
is_ipaddress(hostname), module=urllib3.util.ssl_, line:457 at site-packages\urllib3\util\ssl_.py
检测给定的主机名是IPv4还是IPv6地址。
也检测带有安全区域id的IPv6地址。
:param str hostname: 要检查的主机名。
:return: 如果主机名是IP地址,则为True,否则为False。
🌿21 _is_key_file_encrypted(key_file)
is_key_file_encrypted(key_file), module=urllib3.util.ssl, line:470 at site-packages\urllib3\util\ssl_.py
检测密钥文件是否加密。
🌿22 _ssl_wrap_socket_impl(sock, ssl_context, tls_in_tls, server_hostname=None)
ssl_wrap_socket_impl(sock, ssl_context, tls_in_tls, server_hostname=None), module=urllib3.util.ssl, line:481 at site-packages\urllib3\util\ssl_.py
🔵类
🌿23 urllib3.exceptions.InsecurePlatformWarning
InsecurePlatformWarning, urllib3.exceptions.InsecurePlatformWarning, module=urllib3.exceptions, line:209 at site-packages\urllib3\exceptions.py
当某些TLS/SSL配置在平台上不可用时发出警告。
🌿24 urllib3.exceptions.ProxySchemeUnsupported
ProxySchemeUnsupported, urllib3.exceptions.ProxySchemeUnsupported, module=urllib3.exceptions, line:306 at site-packages\urllib3\exceptions.py
🌿24 urllib3.exceptions.SNIMissingWarning
SNIMissingWarning, urllib3.exceptions.SNIMissingWarning, module=urllib3.exceptions, line:215 at site-packages\urllib3\exceptions.py
发出没有SNI可用的HTTPS请求时发出警告。
🌿25 urllib3.exceptions.SSLError
SSLError, urllib3.exceptions.SSLError, module=urllib3.exceptions, line:44 at site-packages\urllib3\exceptions.py
当SSL证书在HTTPS连接中失败时引发。
🌿26 ssl.SSLContext
SSLContext, ssl.SSLContext, module=ssl, line:0 at
SSLContext保存各种与ssl相关的配置选项和数据,例如证书和可能的私钥。
data
1 sslobject_class=<class ‘ssl.SSLObject’> kind:data type:type class:<class ‘ssl.SSLContext’>
2 sslsocket_class=<class ‘ssl.SSLSocket’> kind:data type:type class:<class ‘ssl.SSLContext’>
property
3 hostname_checks_common_name=<property object at 0x00000252E83CF6D8> kind:property type:property class:<class ‘ssl.SSLContext’>
4 maximum_version=<property object at 0x00000252E83CF638> kind:property type:property class:<class ‘ssl.SSLContext’>
5 minimum_version=<property object at 0x00000252E83CF5E8> kind:property type:property class:<class ‘ssl.SSLContext’>
6 options=<property object at 0x00000252E83CF688> kind:property type:property class:<class ‘ssl.SSLContext’>
7 protocol=<property object at 0x00000252E83CF598> kind:property type:property class:<class ‘ssl.SSLContext’>
8 verify_flags=<property object at 0x00000252E83CF778> kind:property type:property class:<class ‘ssl.SSLContext’>
9 verify_mode=<property object at 0x00000252E83CF7C8> kind:property type:property class:<class ‘ssl.SSLContext’>
method
10 load_default_certs(self, purpose=Purpose.SERVER_AUTH)
kind=method class=SSLContext objtype=function line:485 at …\ssl.py
11 set_alpn_protocols(self, alpn_protocols)
kind=method class=SSLContext objtype=function line:460 at …\ssl.py
12 set_npn_protocols(self, npn_protocols)
kind=method class=SSLContext objtype=function line:436 at …\ssl.py
13 set_servername_callback(self, server_name_callback)
kind=method class=SSLContext objtype=function line:447 at …\ssl.py
14 wrap_bio(self, incoming, outgoing, server_side=False,
kind=method class=SSLContext objtype=function line:426 at …\ssl.py
15 wrap_socket(self, sock, server_side=False,
kind=method class=SSLContext objtype=function line:410 at …\ssl.py
🌿27 urllib3.util.ssltransport.SSLTransport
SSLTransport, urllib3.util.ssltransport.SSLTransport, module=urllib3.util.ssltransport, line:11 at site-packages\urllib3\util\ssltransport.py
🔵内嵌函数或方法
27 hexlify
28 unhexlify
29 md5
30 sha1
31 sha256
32 _const_compare_digest
🔵私有或局部
33 _const_compare_digest_backport <function _const_compare_digest_backport at 0x00000252E8403E58>
34 _const_compare_digest
35 _is_key_file_encrypted <function _is_key_file_encrypted at 0x00000252E841FA68>
36 _ssl_wrap_socket_impl <function _ssl_wrap_socket_impl at 0x00000252E841FAF8>
🔵剩余
37 doc
38 loader <frozen_importlib_external.SourceFileLoader object at 0x00000252E840A308>
39 spec ModuleSpec(name='urllib3.util.ssl’, loader=<frozen_importlib_external.SourceFileLoader object at 0x00000252E840A308>, origin='…\lib\site-packages\urllib3\util\ssl.py’)
40 absolute_import _Feature((2, 5, 0, ‘alpha’, 1), (3, 0, 0, ‘alpha’, 0), 16384)
41 BRACELESS_IPV6_ADDRZ_RE re.compile(‘^(?😦?:[0-9A-Fa-f]{1,4}😃{6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]{1,3}.){3}[0-9]{1,3})|:😦?:[0-9A-Fa-f]{1,4}😃{5}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]{1,3}.){3}[0-9]{1,3})|(?:[0-9)
42 IPV4_RE re.compile(’^(?:[0-9]{1,3}.){3}[0-9]{1,3}$')
43 CERT_REQUIRED 2
44 PROTOCOL_TLS 2
45 PROTOCOL_SSLv23 2
46 PROTOCOL_TLS_CLIENT 16
47 OP_NO_COMPRESSION 131072
48 OP_NO_SSLv2 0
49 OP_NO_SSLv3 33554432
50 OP_NO_TICKET 16384
☘️【urllib3.util.timeout】
timeout, fullname=urllib3.util.timeout, file=urllib3\util\timeout.py
🔵统计
序号 | 类别 | 数量 |
---|---|---|
4 | str | 4 |
8 | dict | 1 |
9 | module | 1 |
10 | class | 2 |
12 | builtin_function_or_method | 2 |
13 | residual | 6 |
14 | system | 8 |
15 | private | 2 |
16 | all | 16 |
🔵模块
🌿1 time
time, fullname=time
🔵类
🌿2 urllib3.exceptions.TimeoutStateError
TimeoutStateError, urllib3.exceptions.TimeoutStateError, module=urllib3.exceptions, line:104 at site-packages\urllib3\exceptions.py
将无效状态传递给超时时引发
🌿3 urllib3.util.timeout.Timeout
Timeout, urllib3.util.timeout.Timeout, module=urllib3.util.timeout, line:19 at site-packages\urllib3\util\timeout.py
🔵内嵌函数或方法
3 getdefaulttimeout
4 current_time
🔵私有或局部
5 _GLOBAL_DEFAULT_TIMEOUT <object object at 0x00000252E6007FD0>
6 _Default <object object at 0x00000252E83534D0>
🔵剩余
7 doc
8 loader <_frozen_importlib_external.SourceFileLoader object at 0x00000252E840A508>
9 spec ModuleSpec(name=‘urllib3.util.timeout’, loader=<_frozen_importlib_external.SourceFileLoader object at 0x00000252E840A508>, origin=‘…\lib\site-packages\urllib3\util\timeout.py’)
10 absolute_import _Feature((2, 5, 0, ‘alpha’, 1), (3, 0, 0, ‘alpha’, 0), 16384)
11 _GLOBAL_DEFAULT_TIMEOUT <object object at 0x00000252E6007FD0>
12 _Default <object object at 0x00000252E83534D0>
☘️【urllib3.util.proxy】
proxy, fullname=urllib3.util.proxy, file=urllib3\util\proxy.py
🔵统计
序号 | 类别 | 数量 |
---|---|---|
4 | str | 4 |
8 | dict | 1 |
11 | function | 5 |
13 | residual | 3 |
14 | system | 8 |
16 | all | 13 |
🔵函数
🌿1 create_urllib3_context(ssl_version=None, cert_reqs=None, options=None, ciphers=None)
create_urllib3_context(ssl_version=None, cert_reqs=None, options=None, ciphers=None), module=urllib3.util.ssl_, line:250 at site-packages\urllib3\util\ssl_.py
所有参数的含义都与 ``ssl_wrap_socket``相同。
默认情况下,这个函数做了很多与在Python 3.4+上r ``ssl.create_default_context`` 相同的工作。它:
—禁用SSLv2、SSLv3和压缩
—设置一组受限制的服务器密码
如果您希望启用SSLv3,您可以:
from urllib3.util import ssl_
context = ssl_.create_urllib3_context()
context.options &= ~ssl_.OP_NO_SSLv3
你可以做同样的事情来启用压缩(替换 ``COMPRESSION`` 对于上面最后一行中的 `SSLv3` )。
:param ssl_version: 需要使用的协议版本。这将默认为PROTOCOL_SSLv23,它将协商服务器和您的OpenSSL安装支持的最高协议。
:param cert_reqs: 是否需要证书验证。默认为“``ssl.CERT_REQUIRED``。
:param options: 指定的OpenSSL选项。这些默认为``ssl.OP_NO_SSLv2``, ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION`` 和 ``ssl.OP_NO_TICKET``。
:param ciphers: 允许服务器选择的密码套件。
:返回: 构造的带有指定选项的SSLContext对象
:rtype: SSLContext
🌿2 resolve_cert_reqs(candidate)
resolve_cert_reqs(candidate), module=urllib3.util.ssl_, line:211 at site-packages\urllib3\util\ssl_.py
将参数解析为一个数字常量,该常量可以从ssl模块传递给wrap套接字函数/方法。
默认为 :data:`ssl.CERT_REQUIRED`。
如果给定一个字符串,则假定它是:mod:`ssl`模块中常量的名称或其缩写。
(因此您可以指定“REQUIRED”而不是“CERT_REQUIRED”。
如果它既不是`None`也不是字符串,我们假设它已经是可以直接传递给wrap套接字的数字常量。
🌿3 resolve_ssl_version(candidate)
resolve_ssl_version(candidate), module=urllib3.util.ssl_, line:234 at site-packages\urllib3\util\ssl_.py
比如解析证书请求 resolve_cert_reqs
🌿4 connection_requires_http_tunnel(proxy_url=None, proxy_config=None, destination_scheme=None)
connection_requires_http_tunnel(proxy_url=None, proxy_config=None, destination_scheme=None), module=urllib3.util.proxy, line:4 at site-packages\urllib3\util\proxy.py
如果连接需要通过代理进行HTTP CONNECT,则返回True。
:param URL proxy_url: 代理的URL。
:param ProxyConfig proxy_config: 来自poolmanager.py的代理配置
:param str destination_scheme: 目的地的方案。(即https, http等)
🌿5 create_proxy_ssl_context(ssl_version, cert_reqs, ca_certs=None, ca_cert_dir=None, ca_cert_data=None)
create_proxy_ssl_context(ssl_version, cert_reqs, ca_certs=None, ca_cert_dir=None, ca_cert_data=None), module=urllib3.util.proxy, line:37 at site-packages\urllib3\util\proxy.py
如果用户没有提供代理ssl上下文,则生成默认代理ssl上下文。
☘️【urllib3.util.ssl_match_hostname】
ssl_match_hostname, fullname=urllib3.util.ssl_match_hostname, file=urllib3\util\ssl_match_hostname.py
Python 3.3.3中的match_hostname()函数,在使用SSL时必不可少。
🔵统计
序号 | 类别 | 数量 |
---|---|---|
4 | str | 6 |
8 | dict | 1 |
9 | module | 3 |
10 | class | 1 |
11 | function | 4 |
13 | residual | 2 |
14 | system | 9 |
15 | private | 3 |
16 | all | 17 |
🔵常量
🔵模块
🌿1 re
re, fullname=re, file=re.py
🌿2 sys
sys, fullname=sys
🌿3 ipaddress
ipaddress, fullname=ipaddress, file=ipaddress.py
🔵函数
🌿4 _dnsname_match(dn, hostname, max_wildcards=1)
_dnsname_match(dn, hostname, max_wildcards=1), module=urllib3.util.ssl_match_hostname, line:25 at site-packages\urllib3\util\ssl_match_hostname.py
根据 RFC 6125, 6.4.3节来匹配。[参见:](http://tools.ietf.org/html/rfc6125#section-6.4.3)
🌿5 _to_unicode(obj)
_to_unicode(obj), module=urllib3.util.ssl_match_hostname, line:79 at site-packages\urllib3\util\ssl_match_hostname.py
🌿6 _ipaddress_match(ipname, host_ip)
_ipaddress_match(ipname, host_ip), module=urllib3.util.ssl_match_hostname, line:86 at site-packages\urllib3\util\ssl_match_hostname.py
精确匹配IP地址。RFC 6125明确地没有为此定义一个算法(章节1.7.2 -“超出范围”)。
🌿7 match_hostname(cert, hostname)
match_hostname(cert, hostname), module=urllib3.util.ssl_match_hostname, line:98 at site-packages\urllib3\util\ssl_match_hostname.py
验证*cert*(由SSLSocket.getpeercert()返回的解码格式)是否与 *hostname* 匹配。
遵循 RFC 2818 和 RFC 6125 规则,但是IP地址不接受*hostname*。
失败时引发CertificateError。
如果成功,该函数将不返回任何内容。
🔵类
🌿8 urllib3.util.ssl_match_hostname.CertificateError
CertificateError, urllib3.util.ssl_match_hostname.CertificateError, module=urllib3.util.ssl_match_hostname, line:21 at site-packages\urllib3\util\ssl_match_hostname.py
🔵私有或局部
9 _dnsname_match <function _dnsname_match at 0x00000252E8434708>
10 _to_unicode <function _to_unicode at 0x00000252E843A048>
11 _ipaddress_match <function _ipaddress_match at 0x00000252E843A0D8>
☘️【urllib3.util.queue】
queue, fullname=urllib3.util.queue, file=urllib3\util\queue.py
☘️【urllib3.packages】
packages, fullname=urllib3.packages, file=urllib3\packages_init_.py
☘️【urllib3.exceptions】
exceptions, fullname=urllib3.exceptions, file=urllib3\exceptions.py
☘️【urllib3._version】
_version, fullname=urllib3._version, file=urllib3_version.py
☘️【urllib3.contrib】
contrib, fullname=urllib3.contrib, file=urllib3\contrib_init_.py
☘️【urllib3.util】
util, fullname=urllib3.util, file=urllib3\util_init_.py
☘️【urllib3._collections】
_collections, fullname=urllib3._collections, file=urllib3_collections.py
☘️【urllib3.connection】
connection, fullname=urllib3.connection, file=urllib3\connection.py
☘️【urllib3.fields】
fields, fullname=urllib3.fields, file=urllib3\fields.py
☘️【urllib3.filepost】
filepost, fullname=urllib3.filepost, file=urllib3\filepost.py
☘️【urllib3.request】
request, fullname=urllib3.request, file=urllib3\request.py
☘️【urllib3.response】
response, fullname=urllib3.response, file=urllib3\response.py
☘️【urllib3.connectionpool】
connectionpool, fullname=urllib3.connectionpool, file=urllib3\connectionpool.py
☘️【urllib3.poolmanager】
poolmanager, fullname=urllib3.poolmanager, file=urllib3\poolmanager.py
☘️【urllib3.packages.six】
six, fullname=urllib3.packages.six, file=urllib3\packages\six.py
☘️【urllib3.contrib.socks】
socks, fullname=urllib3.contrib.socks, file=urllib3\contrib\socks.py
☘️【urllib3.util.connection】
connection, fullname=urllib3.util.connection, file=urllib3\util\connection.py
☘️【urllib3.util.request】
request, fullname=urllib3.util.request, file=urllib3\util\request.py
☘️【urllib3.util.response】
response, fullname=urllib3.util.response, file=urllib3\util\response.py
☘️【datetime】
datetime, fullname=datetime, file=datetime.py
☘️【os】
os, fullname=os, file=os.py
☘️【re】
re, fullname=re, file=re.py
☘️【socket】
socket, fullname=socket, file=socket.py
☘️【ssl】
ssl, fullname=ssl, file=ssl.py
☘️【email】
email, fullname=email, file=email_init_.py
☘️【mimetypes】
mimetypes, fullname=mimetypes, file=mimetypes.py
☘️【binascii】
binascii, fullname=binascii
☘️【codecs】
codecs, fullname=codecs, file=codecs.py
☘️【io】
io, fullname=io, file=io.py
☘️【sys】
sys, fullname=sys
☘️【zlib】
zlib, fullname=zlib
☘️【errno】
errno, fullname=errno
☘️【queue】
queue, fullname=queue, file=queue.py
☘️【collections】
collections, fullname=collections, file=collections_init_.py
☘️【functools】
functools, fullname=functools, file=functools.py
☘️【itertools】
itertools, fullname=itertools
☘️【operator】
operator, fullname=operator, file=operator.py
☘️【types】
types, fullname=types, file=types.py
☘️【socks】
socks, fullname=socks, file=socks.py
☘️【select】
select, fullname=select, file=select.pyd
☘️【http.client】
client, fullname=http.client, file=http\client.py
HTTP/1.1客户端库
☘️【logging】
logging, fullname=logging, file=logging_init_.py
☘️【warnings】
warnings, fullname=warnings, file=warnings.py
☘️【time】
time, fullname=time
☘️【hmac】
hmac, fullname=hmac, file=hmac.py
☘️【ipaddress】
ipaddress, fullname=ipaddress, file=ipaddress.py