3 nf\@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__/usr/lib/python3.6/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)Z proxy_typeZ proxy_addrrZproxy_usernameZproxy_passwordZ proxy_rdnsrz0Connection to %s timed out. (connect timeout=%s)Nz(Failed to establish a new connection: %s)rrsocksZcreate_connectionhostportrr SocketTimeoutr Z ProxyErrorZ socket_err isinstancer SocketError)rZextra_kwZconnerrrr _new_connCsL       zSOCKSConnection._new_conn)__name__ __module__ __qualname____doc__rr) __classcell__rr)rrr;s rc@s eZdZdS)SOCKSHTTPSConnectionN)r*r+r,rrrrr/sr/c@seZdZeZdS)SOCKSHTTPConnectionPoolN)r*r+r,r ConnectionClsrrrrr0sr0c@seZdZeZdS)SOCKSHTTPSConnectionPoolN)r*r+r,r/r1rrrrr2sr2cs,eZdZdZeedZdfdd ZZS)SOCKSProxyManagerzh A version of the urllib3 ProxyManager that routes connections via the defined SOCKS proxy. )ZhttpZhttpsN 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:rZsocks5FZsocks5hTZsocks4Zsocks4az)Unable to determine SOCKS version from %s)rrrrr r!r)rZauthsplitlenschemer"ZPROXY_TYPE_SOCKS5ZPROXY_TYPE_SOCKS4 ValueError proxy_urlr#r$rr3rpool_classes_by_scheme) rr:rr Z num_poolsZheadersZconnection_pool_kwZparsedr6rr!Z socks_options)rrrrs<         zSOCKSProxyManager.__init__)NNr4N) r*r+r,r-r0r2r;rr.rr)rrr3s r3) r-Z __future__rr" ImportErrorwarnings exceptionsrwarnZsocketrr'rr%Z connectionrrZconnectionpoolr r r r Z poolmanagerr Zutil.urlrZsslrr/r0r2r3rrrrs2       F