o ‰a.ã@sjdZddlZddlZejddkZer&ddlmZddlmZddl m Z n"ddl Zddl mZzddl mZ WneyGddlmZ YnwzddlZddlmZmZWn ey_Ynwe ee¡Gdd „d ƒZed kr³eejƒd kr{d Znejd ZeƒZe e¡ee ¡ƒedƒddlZe e ¡¡ee ej¡ƒee ¡dƒe  ¡dSdS)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ˆ_|pgˆ_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©ú//usr/lib/python3/dist-packages/curl/__init__.pyÚheader_callback=sz&Curl.__init__..header_callback)ÚpycurlrÚhandleÚset_urlÚ verbosityÚ fakeheadersÚpayloadrÚ payload_iorÚ set_optionÚSSL_VERIFYHOSTÚFOLLOWLOCATIONÚ MAXREDIRSÚNOSIGNALÚ COOKIEFILEÚ set_timeoutÚNETRCÚ WRITEFUNCTIONÚwriteÚHEADERFUNCTION)rÚbase_urlrrrrrÚ__init__%s"     z Curl.__init__cCó| tj|¡dS)z&Set timeout for a retrieving an objectN)rrÚTIMEOUT)rÚtimeoutrrrr$AózCurl.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)rÚsetopt©rÚargsrrrrJózCurl.set_optioncCr+)z'Set verbosity to 1 to see transactions.N)rrÚVERBOSE)rÚlevelrrrÚ set_verbosityNr.zCurl.set_verbositycCsn|jr | tj|j¡|r| tjt|j|ƒ¡d|_|j  d¡|j  ¡d|_ |j   ¡|j ¡|_|jS)zPerform the pending request.Nrr )rrrÚ HTTPHEADERr/rr)rrÚseekÚtruncaterrÚperformÚgetvalue)rÚ relative_urlrrrÚ __requestRs    zCurl.__requestcCó.|r |dt |¡7}| tjd¡| |¡S)z=Ship a GET request for a specified URL, capture the response.ú?r )Ú urllib_parseÚ urlencoderrÚHTTPGETÚ_Curl__request©rr0ÚparamsrrrÚget`ó zCurl.getcCr?)z>Ship a HEAD request for a specified URL, capture the response.r@r )rArBrrÚNOBODYrDrErrrÚheadgrHz Curl.headcCs,| tjd¡| tjt |¡¡| |¡S)z=Ship a POST request to a specified CGI, capture the response.r )rrÚPOSTÚ POSTFIELDSrArBrD)rÚcgirFrrrÚpostns z Curl.postcCó|jS)z'Return the body from the last response.)rrrrrÚbodytóz Curl.bodycCrO)z)Return the header from the last response.)rrrrrÚheaderxrQz Curl.headercGs |jj|ŽS)z Get information about retrieval.)rÚgetinfor2rrrÚget_info|s z 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-verifyresultÚfiletimezstarttransfer-timezhttp-connectcodezhttpauth-availzproxyauth-availúos-errnoz num-connectsz ssl-enginesÚ cookielistÚ lastsocketzftp-entry-path)!rrSrÚ EFFECTIVE_URLÚ HTTP_CODEÚ TOTAL_TIMEÚNAMELOOKUP_TIMEÚ CONNECT_TIMEÚPRETRANSFER_TIMEÚ REDIRECT_TIMEÚREDIRECT_COUNTÚ SIZE_UPLOADÚ SIZE_DOWNLOADÚ SPEED_UPLOADÚ HEADER_SIZEÚ REQUEST_SIZEÚCONTENT_LENGTH_DOWNLOADÚCONTENT_LENGTH_UPLOADÚ CONTENT_TYPEÚ RESPONSE_CODEÚSPEED_DOWNLOADÚSSL_VERIFYRESULTÚ INFO_FILETIMEÚSTARTTRANSFER_TIMEÚHTTP_CONNECTCODEÚHTTPAUTH_AVAILÚPROXYAUTH_AVAILÚOS_ERRNOÚ NUM_CONNECTSÚ SSL_ENGINESÚINFO_COOKIELISTÚ LASTSOCKETÚFTP_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¥r4z Curl.answeredcCs&|jr|j ¡d|_d|_d|_dS)z#Close a session, freeing resources.Nr )rÚcloserrrrrrr|©s   z Curl.closecCs | ¡dS©N)r|rrrrÚ__del__±s z Curl.__del__)r Nr})Ú__name__Ú __module__Ú __qualname__Ú__doc__r*r$rrr7rDrGrJrNrPrRrTrxr{r|r~rrrrr#s$    % rÚ__main__r zhttps://curl.haxx.ser zK========================================================================== rV)!r‚ÚsysrÚ version_infoÚpy3Ú urllib.parseÚparserArÚiorÚurllibÚurlparseÚ cStringIOrÚ ImportErrorÚsignalrrrrÚlenÚargvr0ÚcrGÚprintrPÚpprintrxrTrqr|rrrrÚsJ    ÿ ÿ     ó