3 ì2;Za ã@s"dZddlZyddlZddlZWn(ek rHddljZddljZYnXddl Z dd„Z Gdd„dej ƒZ Gdd„dej ƒZGd d „d ejejƒZed k�rddlZyeejd ƒZWneefk rÔd ZYnXejee jdeƒƒZedejdƒjƒjƒƒedejdƒjƒjƒƒdS)zù SocksiPy + urllib2 handler version: 0.3 author: e 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... éNcCs|jƒ}|j|ƒ|S)N)ÚcopyÚupdate)ÚaÚbÚd©rú"/usr/lib/python3.6/sockshandler.pyÚ merge_dicts r c@seZdZddd„Zdd„ZdS)ÚSocksiPyConnectionNTc Os*||||||f|_tjj|f|ž|ŽdS)N)Ú proxyargsÚhttplibÚHTTPConnectionÚ__init__) ÚselfÚ proxytypeÚ proxyaddrÚ proxyportÚrdnsÚusernameÚpasswordÚargsÚkwargsrrrrszSocksiPyConnection.__init__cCsPtjƒ|_|jj|jŽt|jƒttfkr8|jj |jƒ|jj |j |j fƒdS)N) ÚsocksÚ socksocketÚsockÚsetproxyr ÚtypeÚtimeoutÚintÚfloatÚ settimeoutÚconnectÚhostÚport)rrrrr!s  zSocksiPyConnection.connect)NTNN)Ú__name__Ú __module__Ú __qualname__rr!rrrrr s r c@seZdZddd„Zdd„ZdS)ÚSocksiPyConnectionSNTc Os*||||||f|_tjj|f|ž|ŽdS)N)r r ÚHTTPSConnectionr) rrrrrrrrrrrrr'szSocksiPyConnectionS.__init__cCs\tjƒ}|j|jŽt|jƒttfkr2|j|jƒ|j |j |j fƒt j ||j|jƒ|_dS)N)rrrr rrrrr r!r"r#ÚsslZ wrap_socketZkey_fileZ cert_filer)rrrrrr!+s   zSocksiPyConnectionS.connect)NTNN)r$r%r&rr!rrrrr'&s r'c@s$eZdZdd„Zdd„Zdd„ZdS)ÚSocksiPyHandlercOs||_||_tjj|ƒdS)N)rÚkwÚurllib2Ú HTTPHandlerr)rrrrrrr4szSocksiPyHandler.__init__csd‡fdd„ }ˆj||ƒS)Nrcs(tˆj|ƒ}tˆj|||dœ|—Ž}|S)N)r"r#r)r r+r r)r"r#rrr+Úconn)rrrÚbuild:s z(SocksiPyHandler.http_open..build)Nr)Údo_open)rÚreqr/r)rrÚ http_open9szSocksiPyHandler.http_opencsd‡fdd„ }ˆj||ƒS)Nrcs(tˆj|ƒ}tˆj|||dœ|—Ž}|S)N)r"r#r)r r+r'r)r"r#rrr+r.)rrrr/As z)SocksiPyHandler.https_open..build)Nr)r0)rr1r/r)rrÚ https_open@szSocksiPyHandler.https_openN)r$r%r&rr2r3rrrrr*3sr*Ú__main__éiZ#Z localhostzHTTP: zhttp://httpbin.org/ipzHTTPS: zhttps://httpbin.org/ip) Ú__doc__r)r,r Ú ImportErrorZurllib.requestZrequestZ http.clientZclientrr r r r(r'r-Z HTTPSHandlerr*r$ÚsysrÚargvr#Ú ValueErrorÚ IndexErrorZ build_openerZPROXY_TYPE_SOCKS5ÚopenerÚprintÚopenÚreadÚdecoderrrrÚ s*