3 `=\@s(dZddlmZy ddlZWn6ek rRddlZddlmZejdeYnXddl m Z m Z ddlmZmZdd lmZmZdd lmZmZdd lmZdd lmZy ddlZWnek rdZYnXGd ddeZGdddeeZGdddeZGdddeZGdddeZdS)a This module contains provisional support for SOCKS proxies from within urllib3. This module supports SOCKS4 (specifically the SOCKS4A variant) and SOCKS5. To enable its functionality, either install PySocks or install this module with the ``socks`` extra. The SOCKS implementation supports the full range of urllib3 features. It also supports the following SOCKS features: - SOCKS4 - SOCKS4a - SOCKS5 - Usernames and passwords for the SOCKS proxy Known Limitations: - Currently PySocks does not support contacting remote websites via literal IPv6 addresses. Any such connection attempt will fail. You must use a domain name. - Currently PySocks does not support IPv6 connections to the SOCKS proxy. Any such connection attempt will fail. )absolute_importN)DependencyWarningzSOCKS support in urllib3 requires the installation of optional dependencies: specifically, PySocks. For more information, see https://urllib3.readthedocs.io/en/latest/contrib.html#socks-proxies)errortimeout)HTTPConnectionHTTPSConnection)HTTPConnectionPoolHTTPSConnectionPool)ConnectTimeoutErrorNewConnectionError) PoolManager) parse_urlcs(eZdZdZfddZddZZS)SOCKSConnectionzG A plain-text HTTP connection that connects via a SOCKS proxy. cs"|jd|_tt|j||dS)N_socks_options)poprsuperr__init__)selfargskwargs) __class__n/private/var/folders/47/550316q90kl84vt_jn5ctz8chwmm0c/T/pip-install-yoigbb1v/urllib3/urllib3/contrib/socks.pyr?s zSOCKSConnection.__init__cCsXi}|jr|j|d<|jr$|j|d<yTtj|j|jff|jd|jd|jd|jd|jd|jd|jd |}Wntk r}zt |d |j|jfWYd d }~Xntj k r"}zT|j r|j }t |trt |d |j|jfnt |d |nt |d |WYd d }~Xn2tk rR}zt |d |WYd d }~XnX|S) zA Establish a new connection via the SOCKS proxy. source_addresssocket_options socks_version proxy_host proxy_portusernamepasswordrdns) proxy_type proxy_addrrproxy_usernameproxy_password proxy_rdnsrz0Connection to %s timed out. (connect timeout=%s)Nz(Failed to establish a new connection: %s)rrsockscreate_connectionhostportrr SocketTimeoutr ProxyError socket_err isinstancer SocketError)rextra_kwconnerrrr _new_connCsL       zSOCKSConnection._new_conn)__name__ __module__ __qualname____doc__rr3 __classcell__rr)rrr;s rc@s eZdZdS)SOCKSHTTPSConnectionN)r4r5r6rrrrr9sr9c@seZdZeZdS)SOCKSHTTPConnectionPoolN)r4r5r6r ConnectionClsrrrrr:sr:c@seZdZeZdS)SOCKSHTTPSConnectionPoolN)r4r5r6r9r;rrrrr<sr<cs,eZdZdZeedZdfdd ZZS)SOCKSProxyManagerzh A version of the urllib3 ProxyManager that routes connections via the defined SOCKS proxy. )httphttpsN c  st|}|dkrB|dkrB|jdk rB|jjd}t|dkrB|\}}|jdkrXtj} d} nN|jdkrntj} d} n8|jdkrtj} d} n"|jdkrtj} d} n td |||_ | |j |j ||| d } | |d <t t |j||f|t j|_dS) N:rsocks5Fsocks5hTsocks4socks4az)Unable to determine SOCKS version from %s)rrrrr r!r)rauthsplitlenschemer'PROXY_TYPE_SOCKS5PROXY_TYPE_SOCKS4 ValueError proxy_urlr)r*rr=rpool_classes_by_scheme) rrMrr num_poolsheadersconnection_pool_kwparsedrGrr! socks_options)rrrrs<         zSOCKSProxyManager.__init__)NNr@N) r4r5r6r7r:r<rNrr8rr)rrr=s r=) r7 __future__rr' ImportErrorwarnings exceptionsrwarnsocketrr/rr+ connectionrrconnectionpoolr r r r poolmanagerr Zutil.urlrsslrr9r:r<r=rrrrs2       F