U ä üe.ã@sldZddlZddlZejddkZerLddlmZddlmZddl m Z nFddl Zddl mZzddl mZ Wn ek rddlmZ YnXzddlZddlmZmZWnek rÂYnXe ee¡Gdd „d ƒZed krheejƒd krüd Zn ejd ZeƒZe e¡ee ¡ƒedƒddlZe e ¡¡ee ej¡ƒee ¡dƒe  ¡dS)z.A high-level interface to the pycurl extensionéNé)Úurljoin)ÚBytesIO)ÚStringIO)ÚSIGPIPEÚSIG_IGNc@s˜eZdZdZd$dd„Zdd„Zdd „Zd d „Zd d „Zd%dd„Z d&dd„Z d'dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„ZdS)(ÚCurlz)High-level interface to pycurl functions.ÚNcsÆt ¡ˆ_ˆ |¡dˆ_|p gˆ_dˆ_tƒˆ_dˆ_ ˆ  tj d¡ˆ  tj d¡ˆ  tj d¡ˆ  tjd¡ˆ  tjd¡ˆ d¡ˆ  tjd¡ˆ  tjˆjj¡‡fdd „}ˆ  tj|¡dS) Nrr éééz /dev/nullécsˆj| d¡7_dS)NÚascii)ÚhdrÚdecode)Úx©Úself©ú=/opt/hc_python/lib64/python3.8/site-packages/curl/__init__.pyÚheader_callback=sz&Curl.__init__..header_callback)ÚpycurlrÚhandleÚset_urlÚ verbosityÚ fakeheadersÚpayloadrÚ payload_iorÚ set_optionZSSL_VERIFYHOSTZFOLLOWLOCATIONZ MAXREDIRSZNOSIGNALZ COOKIEFILEÚ set_timeoutÚNETRCZ WRITEFUNCTIONÚwriteZHEADERFUNCTION)rÚbase_urlrrrrrÚ__init__%s"     z Curl.__init__cCs| tj|¡dS)z&Set timeout for a retrieving an objectN)rrÚTIMEOUT)rÚtimeoutrrrrAszCurl.set_timeoutcCs||_| tj|j¡dS)z!Set the base URL to be retrieved.N)r"rrÚURL)rÚurlrrrrEsz Curl.set_urlcGs|jj|ŽdS)zSet an option on the retrieval.N)rZsetopt©rÚargsrrrrJszCurl.set_optioncCs| tj|¡dS)z'Set verbosity to 1 to see transactions.N)rrÚVERBOSE)rÚlevelrrrÚ set_verbosityNszCurl.set_verbositycCsn|jr| tj|j¡|r0| tjt|j|ƒ¡d|_|j  d¡|j  ¡d|_ |j   ¡|j ¡|_|jS)zPerform the pending request.Nrr )rrrZ HTTPHEADERr&rr"rrÚseekÚtruncaterrZperformÚgetvalue)rZ relative_urlrrrÚ __requestRs    zCurl.__requestcCs.|r|dt |¡7}| tjd¡| |¡S)z=Ship a GET request for a specified URL, capture the response.ú?r )Ú urllib_parseÚ urlencoderrZHTTPGETÚ_Curl__request©rr'ÚparamsrrrÚget`szCurl.getcCs.|r|dt |¡7}| tjd¡| |¡S)z>Ship a HEAD request for a specified URL, capture the response.r1r )r2r3rrZNOBODYr4r5rrrÚheadgsz Curl.headcCs,| tjd¡| tjt |¡¡| |¡S)z=Ship a POST request to a specified CGI, capture the response.r )rrÚPOSTZ POSTFIELDSr2r3r4)rÚcgir6rrrÚpostnsz Curl.postcCs|jS)z'Return the body from the last response.)rrrrrÚbodytsz Curl.bodycCs|jS)z)Return the header from the last response.)rrrrrÚheaderxsz Curl.headercGs |jj|ŽS)z Get information about retrieval.)rÚgetinfor(rrrÚget_info|sz Curl.get_infocCsHi}|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj ¡|d<|j tj ¡|d<|j tj ¡|d <|j tj ¡|d <|j tj ¡|d <|j tj¡|d <|j tj¡|d <|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj ¡|d<|j tj ¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj¡|d<|j tj ¡|d<|S)z7Return a dictionary with all info on the last response.z effective-urlz http-codez total-timeznamelookup-timez connect-timezpretransfer-timez redirect-timezredirect-countz size-uploadz size-downloadz speed-uploadz header-sizez request-sizezcontent-length-downloadzcontent-length-uploadz content-typez response-codezspeed-downloadzssl-verifyresultZfiletimezstarttransfer-timezhttp-connectcodezhttpauth-availzproxyauth-availúos-errnoz num-connectsz ssl-enginesZ cookielistZ lastsocketzftp-entry-path)!rr>rZ EFFECTIVE_URLZ HTTP_CODEZ TOTAL_TIMEZNAMELOOKUP_TIMEZ CONNECT_TIMEZPRETRANSFER_TIMEZ REDIRECT_TIMEZREDIRECT_COUNTZ SIZE_UPLOADZ SIZE_DOWNLOADZ SPEED_UPLOADZ HEADER_SIZEZ REQUEST_SIZEZCONTENT_LENGTH_DOWNLOADZCONTENT_LENGTH_UPLOADZ CONTENT_TYPEZ RESPONSE_CODEZSPEED_DOWNLOADZSSL_VERIFYRESULTZ INFO_FILETIMEZSTARTTRANSFER_TIMEZHTTP_CONNECTCODEZHTTPAUTH_AVAILZPROXYAUTH_AVAILÚOS_ERRNOZ NUM_CONNECTSZ SSL_ENGINESZINFO_COOKIELISTZ LASTSOCKETZFTP_ENTRY_PATH)rÚmrrrÚinfo€sDz Curl.infocCs|j |¡dkS)z3Did a given check string occur in the last payload?r)rÚfind)rÚcheckrrrÚanswered¥sz Curl.answeredcCs&|jr|j ¡d|_d|_d|_dS)z#Close a session, freeing resources.Nr )rÚcloserrrrrrrG©s  z Curl.closecCs | ¡dS)N)rGrrrrÚ__del__±sz Curl.__del__)r N)N)r N)r N)Ú__name__Ú __module__Ú __qualname__Ú__doc__r#rrrr,r4r7r8r;r<r=r?rCrFrGrHrrrrr#s"    %rÚ__main__r zhttps://curl.haxx.ser zK========================================================================== r@)!rLÚsysrÚ version_infoÚpy3Ú urllib.parseÚparser2rÚiorÚurllibÚurlparseÚ cStringIOrÚ ImportErrorÚsignalrrrrIÚlenÚargvr'Úcr7Úprintr<ÚpprintrCr?rArGrrrrÚsB