dĜc.dZddlZddlZejddkZerddlmZddlmZddl m Z n#ddl Zddl mZ ddl mZ n#e$r ddlmZ YnwxYw ddlZddlmZmZejeen #e$rYnwxYwGdd Zed kreejd krd Zn ejd ZeZeeeeedddlZejeeeejeede dSdS)z.A high-level interface to the pycurl extensionN)urljoin)BytesIO)StringIO)SIGPIPESIG_IGNczeZdZdZddZdZdZdZdZdd Z dd Z dd Z d Z d Z dZdZdZdZdZdZdS)Curlz)High-level interface to pycurl functions.Nc tj_|d_|pg_d_t_d_ tj d tj d tj d tjd tjdd tjd tjjjfd} tj|dS) Nrr z /dev/nullcNxj|dz c_dS)Nascii)hdrdecode)xselfs //usr/lib/python3/dist-packages/curl/__init__.pyheader_callbackz&Curl.__init__..header_callback=s# HH)) )HHHH)pycurlr handleset_url verbosity fakeheaderspayloadr payload_ior set_optionSSL_VERIFYHOSTFOLLOWLOCATION MAXREDIRSNOSIGNAL COOKIEFILE set_timeoutNETRC WRITEFUNCTIONwriteHEADERFUNCTION)rbase_urlrrs` r__init__z Curl.__init__%s?kmm  X&," !)) -q111 -q111 (!,,, +++ );777   a((( ,do.CDDD * * * * * -?????rcF|tj|dS)z&Set timeout for a retrieving an objectN)r!rTIMEOUT)rtimeouts rr'zCurl.set_timeoutAs 00000rc^||_|tj|jdS)z!Set the base URL to be retrieved.N)r,r!rURL)rurls rrz Curl.set_urlEs'   DM22222rc$|jj|dS)zSet an option on the retrieval.N)rsetoptrargss rr!zCurl.set_optionJs D!!!!rcF|tj|dS)z'Set verbosity to 1 to see transactions.N)r!rVERBOSE)rlevels r set_verbosityzCurl.set_verbosityNs .....rc|jr%|tj|j|r3|tjt |j|d|_|j d|j d|_ |j |j|_|jS)zPerform the pending request.Nrr )rr!r HTTPHEADERr2rr,rr seektruncaterrperformgetvalue)r relative_urls r __requestzCurl.__requestRs   A OOF-t/? @ @ @  N OOFJ |(L(L M M M  Q   """ //11 |rc|r|dtj|zz }|tjd||S)z=Ship a GET request for a specified URL, capture the response.?r) urllib_parse urlencoder!rHTTPGET_Curl__requestrr3paramss rgetzCurl.get`sL  8 3/777 7C ***~~c"""rc|r|dtj|zz }|tjd||S)z>Ship a HEAD request for a specified URL, capture the response.rEr)rFrGr!rNOBODYrIrJs rheadz Curl.headgsL  8 3/777 7C  q)))~~c"""rc|tjd|tjt j|||S)z=Ship a POST request to a specified CGI, capture the response.r)r!rPOST POSTFIELDSrFrGrI)rcgirKs rpostz Curl.postnsL  Q''' )<+A&+I+IJJJ~~c"""rc|jS)z'Return the body from the last response.)rrs rbodyz Curl.bodyts |rc|jS)z)Return the header from the last response.)rrVs rheaderz Curl.headerxs xrc |jj|S)z Get information about retrieval.)rgetinfor6s rget_infoz Curl.get_info|s"t{"D))rc i}|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj |d<|jtj |d<|jtj |d <|jtj |d <|jtj |d <|jtj|d <|jtj|d <|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj |d<|jtj |d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj|d<|jtj |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-verifyresultfiletimezstarttransfer-timezhttp-connectcodezhttpauth-availzproxyauth-availos-errnoz num-connectsz ssl-engines cookielist lastsocketzftp-entry-path)!rr[r EFFECTIVE_URL HTTP_CODE TOTAL_TIMENAMELOOKUP_TIME CONNECT_TIMEPRETRANSFER_TIME REDIRECT_TIMEREDIRECT_COUNT SIZE_UPLOAD SIZE_DOWNLOAD SPEED_UPLOAD HEADER_SIZE REQUEST_SIZECONTENT_LENGTH_DOWNLOADCONTENT_LENGTH_UPLOAD CONTENT_TYPE RESPONSE_CODESPEED_DOWNLOADSSL_VERIFYRESULT INFO_FILETIMESTARTTRANSFER_TIMEHTTP_CONNECTCODEHTTPAUTH_AVAILPROXYAUTH_AVAILOS_ERRNO NUM_CONNECTS SSL_ENGINESINFO_COOKIELIST LASTSOCKETFTP_ENTRY_PATH)rms rinfoz Curl.infos ![001EFF/,,V-=>>++--f.?@@,#{2263IJJ  K//0CDD. $ 3 3F4K L L ![001EFF/"k11&2GHH ;..v/ABB-![001EFF/ K//0CDD.;..v/ABB- K//0CDD.'+{':':6;Y'Z'Z #$%)[%8%89U%V%V !" K//0CDD.![001EFF/"k11&2GHH  $ 3 3F4K L L  ++F,@AA* "&+"5"5f6O"P"P ![001EFF/"k11&2GHH  $ 3 3F4K L L "k11&2GHH #{2263IJJ  ++FO<<*  K//0CDD.;..v/ABB-+--f.DEE,+--f.?@@,"k11&2GHH rc>|j|dkS)z3Did a given check string occur in the last payload?r)rfind)rchecks ransweredz Curl.answereds|  ''1,,rcp|jr|jd|_d|_d|_dS)z#Close a session, freeing resources.Nr )rcloserrrVs rrz Curl.closes9 ; K       rc.|dSN)rrVs r__del__z Curl.__del__s r)r Nr)__name__ __module__ __qualname____doc__r-r'rr!r;rIrLrOrTrWrYr\rrrrrrr r #s#//@@@@8111333 """///    ########### ***###J---rr __main__r zhttps://curl.haxx.serzK========================================================================== r_)!rsysr version_infopy3 urllib.parseparserFriorurlliburlparse cStringIOr ImportErrorsignalrrr rlenargvr3crLprintrWpprintrr\rzrrrrrsa44  qQ 1''''''$$$$$$!!!!      11111111 111000000001 $MMM''''''''FM'7####   D OOOOOOOOd z s38}}q$hqk AEE#JJJ E!&&((OOO E-MMMFM!&&(( E!**V_ % %&&& E!&&((: GGIIIIIs#A AA A33A;:A;