
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    "Ù@Wa  ã                	   @   s&  d Z ddlZzddlZddlZW n, ek
rL   ddlmZ ddlmZ Y nX ddl	Z	dd„ Z
G dd„ dejƒZG dd„ dejƒZG d	d
„ d
ejejƒZedk�r"ddlZzeejd ƒZW n eefk
rØ   dZY nX e ee	jdeƒ¡Zede d¡ ¡  ¡  ƒ ede d¡ ¡  ¡  ƒ dS )zù
SocksiPy + urllib2 handler

version: 0.3
author: e<e@tr0ll.in>

This module provides a Handler which you can use with urllib2 to allow it to tunnel your connection through a socks.sockssocket socket, with out monkey patching the original socket...
é    Nc                 C   s   |   ¡ }| |¡ |S ©N)ÚcopyÚupdate)ÚaÚbÚd© r   ú=/opt/alt/python38/lib/python3.8/site-packages/sockshandler.pyÚ
merge_dict   s    
r
   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚSocksiPyConnectionNTc           	      O   s*   ||||||f| _ tjj| f|ž|Ž d S r   )Ú	proxyargsÚhttplibÚHTTPConnectionÚ__init__©	ÚselfZ	proxytypeZ	proxyaddrZ	proxyportZrdnsÚusernameÚpasswordÚargsÚkwargsr   r   r	   r      s    zSocksiPyConnection.__init__c                 C   sP   t  ¡ | _| jj| jŽ  t| jƒttfkr8| j 	| j¡ | j 
| j| jf¡ d S r   )ÚsocksÚ
socksocketÚsockÚsetproxyr   ÚtypeÚtimeoutÚintÚfloatÚ
settimeoutÚconnectÚhostÚport©r   r   r   r	   r      s
    
zSocksiPyConnection.connect)NTNN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r	   r      s   
r   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚSocksiPyConnectionSNTc           	      O   s*   ||||||f| _ tjj| f|ž|Ž d S r   )r   r   ÚHTTPSConnectionr   r   r   r   r	   r   '   s    zSocksiPyConnectionS.__init__c                 C   s\   t  ¡ }|j| jŽ  t| jƒttfkr2| | j¡ | 	| j
| jf¡ t || j| j¡| _d S r   )r   r   r   r   r   r   r   r   r   r   r    r!   ÚsslZwrap_socketZkey_fileZ	cert_filer   )r   r   r   r   r	   r   +   s    zSocksiPyConnectionS.connect)NTNNr#   r   r   r   r	   r'   &   s   
r'   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚSocksiPyHandlerc                 O   s   || _ || _tj | ¡ d S r   )r   ÚkwÚurllib2ÚHTTPHandlerr   )r   r   r   r   r   r	   r   4   s    zSocksiPyHandler.__init__c                    s   d‡ fdd„	}ˆ   ||¡S )Nr   c                    s(   t ˆ j|ƒ}tˆ j| ||dœ|—Ž}|S ©N)r    r!   r   )r
   r+   r   r   ©r    r!   r   r   r+   Zconnr"   r   r	   Úbuild:   s    z(SocksiPyHandler.http_open.<locals>.build)Nr   ©Zdo_open©r   Zreqr0   r   r"   r	   Ú	http_open9   s    zSocksiPyHandler.http_openc                    s   d‡ fdd„	}ˆ   ||¡S )Nr   c                    s(   t ˆ j|ƒ}tˆ j| ||dœ|—Ž}|S r.   )r
   r+   r'   r   r/   r"   r   r	   r0   A   s    z)SocksiPyHandler.https_open.<locals>.build)Nr   r1   r2   r   r"   r	   Ú
https_open@   s    zSocksiPyHandler.https_openN)r$   r%   r&   r   r3   r4   r   r   r   r	   r*   3   s   r*   Ú__main__é   iZ#  Z	localhostzHTTP: zhttp://httpbin.org/ipzHTTPS: zhttps://httpbin.org/ip) Ú__doc__r)   r,   r   ÚImportErrorZurllib.requestZrequestZhttp.clientZclientr   r
   r   r   r(   r'   r-   ZHTTPSHandlerr*   r$   Úsysr   Úargvr!   Ú
ValueErrorÚ
IndexErrorZbuild_openerZPROXY_TYPE_SOCKS5ZopenerÚprintÚopenÚreadÚdecoder   r   r   r	   Ú<module>   s*   

