zmc
2023-10-12 ed135d79df12a2466b52dae1a82326941211dcc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
U
 ý°dç‚ã@sìddlmZddlZddlZddlZddlZddlZddlZddlZddl    m
Z ddl    m Z ddl    m Z ddlmZejrªddlmZdd    lmZdd
lmZdd lmZdd lmZdd lmZddlmZmZm Z ddl!m"Z"ddl#m$Z$zddl%Z%e%j&Z'Wn.e(e)fk
r.dZ%Gdd„de*ƒZ'YnXddl+m,Z,ddl+m-Z-ddl+m.Z.ddl/m0Z0ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7ddl8m9Z9m:Z:m;Z;m<Z<ddl=m>Z>ddlm?Z@ddlmAZAmBZBmCZCmDZDmEZEddlFmGZGmHZHddlImJZJeKZKeLZLe MeN¡ZOddd œZPe Qd!dd¡ZRe Sd"¡ZTGd#d$„d$e ƒZ
Gd%d&„d&e
ƒZUGd'd(„d(ejVƒZWd)d*œd+d,d,d-d-d.d.d.d.d.d/d0d.d.d1d2d(d3œd4d5„ZXdJd6d7d2d8d9œd:d;„ZYd<d.d=d>œd?d@„ZZd7dAœdBdC„Z[GdDdE„dEƒZ\e%sÐe\ZUeUZ]dKdFd.d7dGœdHdI„Z^dS)Lé)Ú annotationsN)ÚHTTPConnection)Ú HTTPException)ÚResponseNotReady©Útimeout)ÚLiteralé©Ú HTTPResponse)Ú_TYPE_PEER_CERT_RET_DICT)Ú SSLTransport)ÚHTTPHeaderDict)Úassert_header_parsing)Ú_DEFAULT_TIMEOUTÚ _TYPE_TIMEOUTÚTimeout)Úto_str)Ú wait_for_readc@s eZdZdS)Ú BaseSSLErrorN)Ú__name__Ú
__module__Ú __qualname__©rrúId:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\urllib3/connection.pyr#sr)Ú
_TYPE_BODY)Ú ProxyConfig)Ú_ResponseOptions©Ú __version__)ÚConnectTimeoutErrorÚHeaderParsingErrorÚNameResolutionErrorÚNewConnectionErrorÚ
ProxyErrorÚSystemTimeWarning)Ú SKIP_HEADERÚSKIPPABLE_HEADERSÚ
connectionÚssl_)Úbody_to_chunks)Úassert_fingerprint)Úcreate_urllib3_contextÚ is_ipaddressÚresolve_cert_reqsÚresolve_ssl_versionÚssl_wrap_socket)ÚCertificateErrorÚmatch_hostname)ÚUrléPi»©ÚhttpÚhttpsiæz[^-!#$%&'*+.^_`|~0-9a-zA-Z]c súeZdZUdZedZded<ejej    dfgZ
ded<dZ d    ed
<d Z d ed <ded<ded<ded<d    ed<ded<ded<ded<ded<dOe d de
d d dœdddddd d!d"d#d$œ    ‡fd%d&„Zedd'œd(d)„ƒZejdd#d*œd+d)„ƒZd,d'œd-d.„ZdPddd/dd#d0œ‡fd1d2„ Zd#d'œd3d4„Zed    d'œd5d6„ƒZed    d'œd7d8„ƒZed    d'œd9d:„ƒZd#d'œ‡fd;d<„ ZdQddd    d    d#d=œ‡fd>d?„ Zddd#d@œ‡fdAdB„ ZdRddCdCdCdDœdddEd/d    d    d    d    d#dFœ    dGdH„ZdSdddEd/d#dIœdJdK„ZdLd'œ‡fdMdN„ Z‡ZS)Tra×
    Based on :class:`http.client.HTTPConnection` but provides an extra constructor
    backwards-compatibility layer between older and newer Pythons.
 
    Additional keyword parameters are used to configure attributes of the connection.
    Accepted parameters include:
 
    - ``source_address``: Set the source address for the current connection.
    - ``socket_options``: Set specific options on the underlying socket. If not specified, then
      defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling
      Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy.
 
      For example, if you wish to enable TCP Keep Alive in addition to the defaults,
      you might pass:
 
      .. code-block:: python
 
         HTTPConnection.default_socket_options + [
             (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
         ]
 
      Or you may want to disable the defaults by passing an empty list (e.g., ``[]``).
    r6ztyping.ClassVar[int]Ú default_portr    z0typing.ClassVar[connection._TYPE_SOCKET_OPTIONS]Údefault_socket_optionsFÚboolÚ is_verifiedNz bool | NoneÚproxy_is_verifiedÚintÚ    blocksizeútuple[str, int] | NoneÚsource_addressz&connection._TYPE_SOCKET_OPTIONS | NoneÚsocket_optionsÚ_has_connected_to_proxyz_ResponseOptions | NoneÚ_response_optionsú
str | NoneÚ _tunnel_hostú
int | NoneÚ _tunnel_portÚ_tunnel_schemeé )rr@r>rAÚproxyÚ proxy_configÚstrrú&None | connection._TYPE_SOCKET_OPTIONSú
Url | NoneúProxyConfig | NoneÚNone)    ÚhostÚportrr@r>rArJrKÚreturnc    sPtƒj||t |¡||d||_||_||_d|_d|_d|_    d|_
d|_ dS)N)rQrRrr@r>F) ÚsuperÚ__init__rZresolve_default_timeoutrArJrKrBrCrErGrH)    ÚselfrQrRrr@r>rArJrK©Ú    __class__rrrU‚s ûzHTTPConnection.__init__©rScCs |j d¡S)aŸ
        Getter method to remove any trailing dots that indicate the hostname is an FQDN.
 
        In general, SSL certificates don't include the trailing dot indicating a
        fully-qualified domain name, and thus, they don't validate properly when
        checked against a domain name that includes the dot. In addition, some
        servers may not expect to receive the trailing dot when provided.
 
        However, the hostname with trailing dot is critical to DNS resolution; doing a
        lookup with the trailing dot will properly only resolve the appropriate FQDN,
        whereas a lookup without a trailing dot will search the system's search domain
        list. Thus, it's important to keep the original host around for use only in
        those cases where it's appropriate (i.e., when doing DNS lookup to establish the
        actual TCP connection across which we're going to send HTTP requests).
        Ú.)Ú    _dns_hostÚrstrip©rVrrrrQ¥szHTTPConnection.host)ÚvaluerScCs
||_dS)z×
        Setter for the `host` property.
 
        We assume that only urllib3 uses the _dns_host attribute; httplib itself
        only uses `host`, and it seems reasonable that other libraries follow suit.
        N)r[)rVr^rrrrQ¸sú socket.socketc
CsÎz$tj|j|jf|j|j|jd}Wn¤tjk
rX}zt    |j
||ƒ|‚W5d}~XYnrt k
r–}z"t |d|j
›d|j›dƒ|‚W5d}~XYn4t k
rÈ}zt|d|›ƒ|‚W5d}~XYnX|S)zoEstablish a socket connection and set nodelay settings on it.
 
        :return: New socket connection.
        )r@rANzConnection to z timed out. (connect timeout=ú)z&Failed to establish a new connection: )r(Úcreate_connectionr[rRrr@rAÚsocketÚgaierrorr"rQÚ SocketTimeoutr ÚOSErrorr#)rVÚsockÚerrrÚ    _new_connÂs0
ü
 þýÿþzHTTPConnection._new_connztyping.Mapping[str, str] | None)rQrRÚheadersÚschemerScs4|dkrtd|›dƒ‚tƒj|||d||_dS)Nr5z$Invalid proxy scheme for tunneling: z", must be either 'http' or 'https')rRri)Ú
ValueErrorrTÚ
set_tunnelrH)rVrQrRrirjrWrrrlÝs 
ÿzHTTPConnection.set_tunnelcCs.| ¡|_|jrd|_| ¡t|jƒ|_dS)NT)rhrfrErBÚ_tunnelr:rJr]rrrÚconnectës
 
zHTTPConnection.connectcCs
|jdkS©N)rfr]rrrÚ    is_closedùszHTTPConnection.is_closedcCs|jdkrdSt|jdd S)NFgr)rfrr]rrrÚ is_connectedýs
zHTTPConnection.is_connectedcCs|jSro)rBr]rrrÚhas_connected_to_proxysz%HTTPConnection.has_connected_to_proxycsFztƒ     ¡W5d|_d|_d|_d|_d|_d|_d|_d|_XdS)NF)
rfr;r<rBrCrErGrHrTÚcloser]rWrrrsszHTTPConnection.close)ÚmethodÚurlÚ    skip_hostÚskip_accept_encodingrScs<t |¡}|r(td|›d| ¡›dƒ‚tƒj||||dS)Úz+Method cannot contain non-token characters z (found at least r`)rvrw)Ú_CONTAINS_CONTROL_CHAR_REÚsearchrkÚgrouprTÚ
putrequest)rVrtrurvrwÚmatchrWrrr|s
 
ÿÿzHTTPConnection.putrequest)ÚheaderÚvaluesrScsbtdd„|Dƒƒs&tƒj|f|žŽn8t| ¡ƒtkr^d dd„ttƒDƒ¡}td|›dƒ‚dS)    rxcss |]}t|tƒo|tkVqdSro)Ú
isinstancerLr&)Ú.0ÚvrrrÚ    <genexpr>,sz+HTTPConnection.putheader.<locals>.<genexpr>z', 'cSsg|]}t |¡‘qSr)rLÚtitle)rr~rrrÚ
<listcomp>0sz,HTTPConnection.putheader.<locals>.<listcomp>z(urllib3.util.SKIP_HEADER only supports 'ú'N)    ÚanyrTÚ    putheaderrÚlowerr'ÚjoinÚsortedrk)rVr~rZskippable_headersrWrrrˆ*sÿ
ÿzHTTPConnection.putheaderT)ÚchunkedÚpreload_contentÚdecode_contentÚenforce_content_lengthz_TYPE_BODY | None)    rtruÚbodyrirŒrrŽrrScCs¦|jdk    r|j |j¡t|||||d|_|dkr8i}tdd„|Dƒƒ}    d|    k}
d|    k} |j|||
| dt|||jd} | j    } | j
}|r¢d|    krô|  d    d
¡nRd |    kr°d }nDd|    kr¾d }n6d }|dkrä| dk    rôd }|  d    d
¡n|  dt |ƒ¡d|    kr |  dt ƒ¡| ¡D]\}}|  ||¡q| ¡| dk    r’| D]N}|sPqBt|t ƒrf| d¡}|r„| dt|ƒ|f¡n
| |¡qB|r¢| d¡dS)N)Úrequest_methodÚ request_urlrrŽrcss|]}t| ¡ƒVqdSro)rr‰)rÚkrrrrƒ[sz)HTTPConnection.request.<locals>.<genexpr>zaccept-encodingrQ)rwrv)rtr>ztransfer-encodingzTransfer-EncodingrŒzcontent-lengthFTzContent-Lengthz
user-agentz
User-Agentzutf-8s%x
%b
s0
 
)rfÚ
settimeoutrrrCÚ    frozensetr|r*r>ÚchunksÚcontent_lengthrˆrLÚ_get_default_user_agentÚitemsÚ
endheadersr€ÚencodeÚsendÚlen)rVrtrurrirŒrrŽrZ header_keysrwrvZ chunks_and_clr–r—r~r^ÚchunkrrrÚrequest8sh
 
ûÿ
 
 
zHTTPConnection.request)rtrurrirScCs(tjdtdd|j||||dddS)zƒ
        Alternative to the common request method, which sends the
        body with chunked encoding and not as one block
        zŒHTTPConnection.request_chunked() is deprecated and will be removed in urllib3 v2.1.0. Instead use HTTPConnection.request(..., chunked=True).é©ÚcategoryÚ
stacklevelT)rrirŒN)ÚwarningsÚwarnÚDeprecationWarningrŸ)rVrtrurrirrrÚrequest_chunked™s üzHTTPConnection.request_chunkedr c sÐ|jdkrtƒ‚|j}d|_|j |j¡ddlm}tƒ ¡}zt    |j
ƒWn@t t fk
rŽ}zt jdt||jƒ|ddW5d}~XYnXt|j
 ¡ƒ}||||j|j|j|j|j||j|j|jd }|S)a
        Get the response from the server.
 
        If the HTTPConnection is in the correct state, returns an instance of HTTPResponse or of whatever object is returned by the response_class variable.
 
        If a request has not been sent or if a previous response has not be handled, ResponseNotReady is raised. If the HTTP response indicates that the connection should be closed, then it will be closed before the response is returned. When the connection is closed, the underlying socket is closed.
        Nr    r
z$Failed to parse headers (url=%s): %sT)Úexc_info) rriÚstatusÚversionÚreasonrrŽÚoriginal_responserr‘r’)rCrrfr”rÚresponser rTÚ getresponserÚmsgr!Ú    TypeErrorÚlogÚwarningÚ_url_from_connectionr’rr™r©rªr«rrŽrr‘)rVZ resp_optionsr Úhttplib_responseÚhperir­rWrrr®¬s>
 
 
üõ zHTTPConnection.getresponse)N)NNr6)FF)NN)NN)rrrÚ__doc__Úport_by_schemer8Ú__annotations__rbÚ IPPROTO_TCPÚ TCP_NODELAYr9r;r<rrUÚpropertyrQÚsetterrhrlrnrprqrrrsr|rˆrŸr§r®Ú __classcell__rrrWrrPsp
 ÿ   ýõ&#    ûûûö"eûrcs.eZdZUdZedZdZded<dZded<dZ    ded<dZ
d    ed
<dZ ded <dZ d ed <dZ d ed<dZded<d*eddejdddddddddddddddddœdd dddddddddddddd    d d ddddddœ‡fdd„Zd+ddddddddd    ddœ
d d!„Zdd"œd#d$„Zdd%d&d'œd(d)„Z‡ZS),ÚHTTPSConnectionz•
    Many of the parameters to this constructor are passed to the underlying SSL
    socket by means of :py:func:`urllib3.util.ssl_wrap_socket`.
    r7Nzint | str | NoneÚ    cert_reqsrDÚca_certsÚ ca_cert_dirúNone | str | bytesÚ ca_cert_dataÚ ssl_versionrFÚssl_minimum_versionÚssl_maximum_versionr+rI)rr@r>rArJrKr¿Úassert_hostnamer+Úserver_hostnameÚ ssl_contextrÀrÁrÃrÅrÆrÄÚ    cert_fileÚkey_fileÚ key_passwordrLrr?r=rMrNrOúNone | str | Literal[False]ússl.SSLContext | NonerP)rQrRrr@r>rArJrKr¿rÇr+rÈrÉrÀrÁrÃrÅrÆrÄrÊrËrÌrSc
s°tƒj||||||||d||_||_||_| |_| |_|
|_| |_||_    ||_
||_ |oft j  |¡|_|oxt j  |¡|_||_|    dkr¦|jdk    rž|jj}    ntdƒ}    |    |_dS)N)rRrr@r>rArJrK)rTrUrËrÊrÌrÉrÈrÇr+rÄrÅrÆÚosÚpathÚ
expanduserrÀrÁrÃÚ verify_moder.r¿)rVrQrRrr@r>rArJrKr¿rÇr+rÈrÉrÀrÁrÃrÅrÆrÄrÊrËrÌrWrrrUõs8ø 
 
zHTTPSConnection.__init__)
rËrÊr¿rÌrÀrÇr+rÁrÃrSc
 
Cs†tjdtdd|dkr4|jdk    r,|jj}ntdƒ}||_||_||_||_    ||_
||_ |oft j  |¡|_|oxt j  |¡|_|    |_dS)zX
        This method should only be called once, before the connection is used.
        z’HTTPSConnection.set_cert() is deprecated and will be removed in urllib3 v2.1.0. Instead provide the parameters to the HTTPSConnection constructor.r r¡N)r¤r¥r¦rÉrÒr.rËrÊr¿rÌrÇr+rÏrÐrÑrÀrÁrÃ)
rVrËrÊr¿rÌrÀrÇr+rÁrÃrrrÚset_cert1s$û
 
 
zHTTPSConnection.set_certrYcCsð| ¡|_}|j}d}|jdk    rX|jdkrD| |j|¡|_}d}d|_| ¡|j}|jdk    rh|j}t    j
  ¡t k}|rŽt  dt ›dt¡t||j|j|j|j|j|j|j|j|j|j||j||j|jd}|j|_|j|_t |j!ƒ|_dS)NFr7TzSystem time is way off (before z5). This will probably lead to SSL verification errors)rfr¿rÄrÅrÆrÀrÁrÃrÊrËrÌrÈrÉÚ
tls_in_tlsrÇr+)"rhrfrQrErHÚ_connect_tls_proxyrBrmrÈÚdatetimeÚdateÚtodayÚ RECENT_DATEr¤r¥r%Ú#_ssl_wrap_socket_and_match_hostnamer¿rÄrÅrÆrÀrÁrÃrÊrËrÌrÉrÇr+rbr;r:rJ)rVrfrÈrÔÚ is_time_offÚsock_and_verifiedrrrrnZsN
 
 
 
ûðzHTTPSConnection.connectr_z ssl.SSLSocket)ÚhostnamerfrScCs\t t|j¡}|j}t||j|j|j|j    |j
|j |j |||j |jddddd}|j|_|jS)zY
        Establish a TLS connection to the proxy using the provided SSL context.
        NF)r¿rÄrÅrÆrÀrÁrÃrÈrÉrÇr+rÊrËrÌrÔ)ÚtypingÚcastrrKrÉrÚr¿rÄrÅrÆrÀrÁrÃrÇr+r;r<rb)rVrÝrfrKrÉrÜrrrrՕs,ïz"HTTPSConnection._connect_tls_proxy)N)    NNNNNNNNN)rrrr¶r·r8r¿r¸rÀrÁrÃrÄrÅrÆr+rrr9rUrÓrnrÕr½rrrWrr¾äsZ
        ýçB>ö");r¾c@s"eZdZUdZded<ded<dS)Ú_WrappedAndVerifiedSocketz[
    Wrapped socket and whether the connection is
    verified after the TLS handshake
    zssl.SSLSocket | SSLTransportrbr:r;N)rrrr¶r¸rrrrrà³s
ràF)rÔr_zNone | str | intrFrDrÂrÍrÎr:)rfr¿rÄrÅrÆrÊrËrÌrÀrÁrÃrÇr+rÈrÉrÔrSc Cs~d}|dkr*d}tt|ƒ||t|ƒd}n|}t|ƒ|_| sL| sLtjsLtjsRd|_|st|    st|
st|rtt|dƒrt|     ¡| dk    r¬|  
d¡}d|kr |d|  d¡…}t |ƒr¬|} t ||||||    |
| ||d
}z| rât|jdd    | ƒnX|jtjkr:|js:| dk    r:| ¡}|rd}nt|d
dƒp&d}t|| p4| |ƒt||jtjkpRt| ƒd WStk
rx| ¡‚YnXdS) a2Logic for constructing an SSLContext from all TLS parameters, passing
    that down into ssl_wrap_socket, and then doing certificate verification
    either via hostname or fingerprint. This function exists to guarantee
    that both proxies and targets have the same behavior when connecting via TLS.
    FNT)rÄrÅrÆr¿Úload_default_certsú[]ú%)
rfÚkeyfileÚcertfilerÌrÀrÁrÃrÈrÉrÔ)Ú binary_formÚhostname_checks_common_name)rbr;)r,r/r.rÒr)Ú IS_PYOPENSSLÚHAS_NEVER_CHECK_COMMON_NAMEÚcheck_hostnameÚhasattrráÚstripÚrfindr-r0Ú_assert_fingerprintÚ getpeercertÚsslÚ    CERT_NONEÚgetattrÚ_match_hostnameràÚ CERT_REQUIREDr:Ú BaseExceptionrs)rfr¿rÄrÅrÆrÊrËrÌrÀrÁrÃrÇr+rÈrÉrÔÚdefault_ssl_contextÚcontextÚ
normalizedZssl_sockÚcertrçrrrrÚ½sžü
þýúù    ÿþýüû
ö 
ÿ
ÿþýÿýýrÚz_TYPE_PEER_CERT_RET_DICT | NonerLrP)rùÚasserted_hostnamerçrSc
Csd| d¡}t|ƒr|}zt|||ƒWn8tk
r^}zt d||¡||_‚W5d}~XYnXdS)Nrâz@Certificate did not match expected hostname: %s. Certificate: %s)rìr-r2r1r±r²Ú
_peer_cert)rùrúrçZstripped_hostnamergrrrró9s
ýróÚ    Exceptionr$)ÚerrÚ proxy_schemerScCsXd t dt|ƒ ¡¡¡}d|kp(d|k}d}td|rB|dkrB|nd›|ƒ}||_|S)    Nú z[^a-z]zwrong version numberzunknown protocolz». Your proxy appears to only use HTTP and not HTTPS, try changing your proxy URL to be HTTP. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#https-proxy-error-http-proxyzUnable to connect to proxyr7rx)rŠÚreÚsplitrLr‰r$Ú    __cause__)rýrþZerror_normalizedZis_likely_http_proxyZhttp_proxy_warningZnew_errrrrÚ_wrap_proxy_errorSsþÿýrrYcCs
dt›S)Nzpython-urllib3/rrrrrr˜ksr˜c@seZdZdZdS)ÚDummyConnectionz-Used to detect a failed ConnectionCls import.N)rrrr¶rrrrrosrz HTTPConnection | HTTPSConnection)ÚconnrÐrScCs(t|tƒrdnd}t||j|j|djS)zUReturns the URL from a given connection. This is mainly used for testing and logging.r7r6)rjrQrRrÐ)r€r¾r3rQrRru)rrÐrjrrrr³zsr³)F)N)_Ú
__future__rrÖÚloggingrÏrrbrÞr¤Ú http.clientrÚ_HTTPConnectionrrrrdÚ TYPE_CHECKINGZtyping_extensionsrr­r Z    util.ssl_r Zutil.ssltransportr Ú _collectionsrZ util.responserZ util.timeoutrrrZ    util.utilrZ    util.waitrrðÚSSLErrorrÚ ImportErrorÚAttributeErrorrõZ_base_connectionrrrÚ_versionrÚ
exceptionsr r!r"r#r$r%Úutilr&r'r(r)Z util.requestr*r+rîr,r-r.r/r0Zutil.ssl_match_hostnamer1r2Zutil.urlr3ÚConnectionErrorÚBrokenPipeErrorÚ    getLoggerrr±r·r×rÙÚcompileryr¾Ú
NamedTupleràrÚrórr˜rÚVerifiedHTTPSConnectionr³rrrrÚ<module>s~             
        
 
 
Pï2ýÿ