kfzdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZddlmZddlmZddlmZdd lmZdd lmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%dd l&m'Z'dd l(m)Z)dd l*m+Z+m,Z,m-Z-m.Z.dZ/ej0Z1dddZ2d3ej4deddZ5ej6dkrdZ7dZdZ8dZ9dIdZ:dZ;dZd!Z?d"Z@d#ZAd$ZBdId%ZCd&ZDd'ZEd(ZFd)ZGd*ZHd+ZId,ZJd-ZKeLd.ZMd/ZNd0ZOd1ZPd2ZQd3ZRd4ZSej=d5ZTd6ZUdJd7ZVd8ZWdKd:ZXd;ZYd<ZZd=[d>Z\e\d?zZ]e\d@zZ^dAZ_dBZ`dCZaejbdDZcejbdEZddFZedGZfdHZgdS)Lz requests.utils ~~~~~~~~~~~~~~ This module provides utility functions that are used within Requests that are also useful for external consumption. N) OrderedDict) make_headers __version__)certs)to_native_string)parse_http_list)quoteurlparsebytesstrunquote getproxies proxy_bypass urlunparse basestring integer_typesis_py3proxy_bypass_environmentgetproxies_environmentMappingcookiejar_from_dict)CaseInsensitiveDict) InvalidURL InvalidHeaderFileModeWarningUnrewindableBodyError)z.netrc_netrcPi)httphttpsz, z,\s*T)accept_encodingzaccept-encodingwin32cV trddl}nddl}n#t$rYdSwxYw ||jd}t ||dd}||dd}n#t$rYdSwxYw|r|sdS| d}|D]t}|dkrd|vrd S| dd }| d d }| d d}tj ||tj rd SudS)NrFz;Software\Microsoft\Windows\CurrentVersion\Internet Settings ProxyEnable ProxyOverride;z.Tz\.*z.*?)rwinreg_winreg ImportErrorOpenKeyHKEY_CURRENT_USERint QueryValueExOSErrorsplitreplacerematchI)hostr-internetSettings proxyEnable proxyOverridetests n/builddir/build/BUILD/imunify360-venv-2.3.5/opt/imunify360/venv/lib/python3.11/site-packages/requests/utils.pyproxy_bypass_registryr@6s  ) ((((   55  %~~f.FN P P f112B.;===>@AAK#//0@0?AAABDMM   55  - 5 &++C00 !  Dy  d??44<<U++D<<U++D<<T**DxdBD)) tt us !!A B BBcZtrt|St|S)zReturn True, if the host should be bypassed. Checks proxy settings gathered from the environment, if specified, or the registry. )rrr@)r:s r?rr]s. " # # /+D11 1(.. .cNt|dr|}|S)z/Returns an internal sequence dictionary update.items)hasattrrD)ds r?dict_to_sequencerGis(q' GGII HrBcd}d}t|drt|}nt|dr|j}nwt|drg |}tj|j}d|jvrtjdtn#tj $rYnwxYwt|dr | }t|dr^|\ | dd | }| |pdn5#ttf$rd}Yn wxYwn#ttf$r||}YnwxYw|d}t!d||z S) Nr__len__lenfilenoba%Requests has determined the content-length for this request using the binary size of the file: however, the file has been opened in text mode (i.e. without the 'b' flag in the mode). This may lead to an incorrect content-length. In Requests 3.0, support will be removed for files in text mode.tellseek)rErJrKosfstatst_sizemodewarningswarnrioUnsupportedOperationrMrNr4IOErrormax)o total_lengthcurrent_positionrKs r? super_lenr]rsLq)1vv E  u H   XXZZF8F++3L!&   . $&    D $q&% % vvxx q&!! %l&: %FF1aLLL#$6688LFF+0q1111)%%%#$LLL%%! 0 0 0 '#/  0* q,!11 2 22s7BB10B1E,AD..EEE E Fctjd}||f}ndtD} ddlm}m}d}|D]X} tj|}n#t$rYdSwxYwtj |r|}nY|dSt|} d} t|tr| d} | j| d} ||| } | r| drdnd} | | | d fSdS#|t"f$r|rYdSwxYw#t$t&f$rYdSwxYw) z;Returns the Requests tuple auth for a given url from netrc.NETRCNc3@K|]}d|VdS)z~/{}N)format).0fs r? z!get_netrc_auth..s.AA6==++AAAAAArBr)netrcNetrcParseError:asciirrO)rPenvironget NETRC_FILESrerfpath expanduserKeyErrorexistsr isinstancerdecodenetlocr5authenticatorsrXr/AttributeError)url raise_errors netrc_filenetrc_locationsrerf netrc_pathrclocrisplitstrr:r login_is r?get_netrc_authr~s((J%-AA[AAA- 00000000   A g((++      w~~c""      F c]] c3   0w//Hyx((+ U:&&55d;;F 4 &q 011qw33 4 4 )          (     sZEA'&E' A61E5A66)E!AE=;D;;E E EEE&%E&ct|dd}|rLt|tr9|ddkr/|ddkr%tj|SdSdSdSdS)z0Tries to guess the filename of the given object.nameNr<>)getattrrprrPrlbasename)objrs r?guess_filenamersx 3 % %D &D*--&$q'S.. HOOw%%%&&&&.. OrBcztj|r|Stj|\}}|rytj|sZtj|\}}d||g}|rtj|Zt j|s|St j|}||vr|Stj }tj||dd}tj|sOt|5}| | |dddn #1swxYwY|S)zReplace nonexistent paths that look like they refer to a member of a zip archive with the location of an extracted copy of the target, or else just return the provided path unchanged. /rN)rPrlror5joinzipfile is_zipfileZipFilenamelisttempfile gettempdir atomic_openwriteread)rlarchivememberprefixzip_filetmpextracted_path file_handlers r?extract_zipped_pathsrs  w~~d gmmD))OGV ,"'..11,'--0066*++ ,"'..11,  g & & w''H X&&((((     CW\\#v||C'8'8'<==N 7>>. ) )6  ( ( 6L   x}}V44 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 s;)F00F47F4c#Ktjddkr tjn tj}t jtj|\}} tj |d5}|Vdddn #1swxYwY|||dS#t$rtj |wxYw)z-Write a file to the disk in an atomic fashionrrO)dirwbN) sys version_inforPrenamer6rmkstemprldirnamefdopen BaseExceptionremove)filenamereplacertmp_descriptortmp_name tmp_handlers r?rrs ,Q/144ryy"*H'/BGOOH4M4MNNNNH Y~t , ,                    8$$$$$  ( s0'B&<B  B& BB&BB&& Cc|dSt|ttttfrt dt |S)aTake an object and test to see if it can be represented as a dictionary. Unless it can not be represented as such, return an OrderedDict, e.g., :: >>> from_key_val_list([('key', 'val')]) OrderedDict([('key', 'val')]) >>> from_key_val_list('string') Traceback (most recent call last): ... ValueError: cannot encode objects that are not 2-tuples >>> from_key_val_list({'key': 'val'}) OrderedDict([('key', 'val')]) :rtype: OrderedDict N+cannot encode objects that are not 2-tuples)rprr boolr2 ValueErrorrvalues r?from_key_val_listrsG$ }t%#udC011HFGGG u  rBc|dSt|ttttfrt dt|t r|}t|S)aTake an object and test to see if it can be represented as a dictionary. If it can be, return a list of tuples, e.g., :: >>> to_key_val_list([('key', 'val')]) [('key', 'val')] >>> to_key_val_list({'key': 'val'}) [('key', 'val')] >>> to_key_val_list('string') Traceback (most recent call last): ... ValueError: cannot encode objects that are not 2-tuples :rtype: list Nr) rprr rr2rrrDlistrs r?to_key_val_listr:sd" }t%#udC011HFGGG%!!  ;;rBcg}t|D]N}|dd|ddcxkrdkrnnt|dd}||O|S)aParse lists as described by RFC 2068 Section 2. In particular, parse comma-separated lists where the elements of the list may include quoted-strings. A quoted-string could contain a comma. A non-quoted string could have quotes in the middle. Quotes are removed automatically after parsing. It basically works like :func:`parse_set_header` just that items may appear multiple times and case sensitivity is preserved. The return value is a standard :class:`list`: >>> parse_list_header('token, "quoted value"') ['token', 'quoted value'] To create a header from the :class:`list` again, use the :func:`dump_header` function. :param value: a string with a list header. :return: :class:`list` :rtype: list Nrr")_parse_list_headerunquote_header_valueappend)rresultitems r?parse_list_headerrXs.F"5)) 8tBCCy ' ' ' 'C ' ' ' ' ''QrT 33D d MrBci}t|D]a}d|vrd||< |dd\}}|dd|ddcxkrdkrnnt|dd}|||<b|S)a^Parse lists of key, value pairs as described by RFC 2068 Section 2 and convert them into a python dict: >>> d = parse_dict_header('foo="is a fish", bar="as well"') >>> type(d) is dict True >>> sorted(d.items()) [('bar', 'as well'), ('foo', 'is a fish')] If there is no value for a key it will be `None`: >>> parse_dict_header('key_without_value') {'key_without_value': None} To create a header from the :class:`dict` again, use the :func:`dump_header` function. :param value: a string with a dict header. :return: :class:`dict` :rtype: dict =Nrrr)rr5r)rrrrs r?parse_dict_headerrxs,F"5)) d??F4L jja(( e !9bcc ) ) ) )c ) ) ) ) )(qt55Et MrBc|r`|d|dcxkrdkrGnnD|dd}|r|dddkr*|ddd dS|S) zUnquotes a header value. (Reversal of :func:`quote_header_value`). This does not use the real unquoting but what browsers are actually using for quoting. :param value: the header value to unquote. :rtype: str rrrrNrOz\\\z\")r6)r is_filenames r?rrs CqU2Y----#----- ad  CeBQBi611==..66ucBB B LrBc2i}|D]}|j||j<|S)zReturns a key/value dictionary from a CookieJar. :param cj: CookieJar object to extract cookies from. :rtype: dict )rr)cj cookie_dictcookies r?dict_from_cookiejarrs/K00#)< FK  rBc"t||S)zReturns a CookieJar from a key/value dictionary. :param cj: CookieJar to insert cookies into. :param cookie_dict: Dict of key/values to insert into CookieJar. :rtype: CookieJar r)rrs r?add_dict_to_cookiejarrs {B / //rBc`tjdttjdtj}tjdtj}tjd}||||z||zS)zlReturns encodings from given content string. :param content: bytestring to extract encodings from. zIn requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)z!])flagsz+]z$^<\?xml.*?encoding=["\']*(.+?)["\'>])rTrUDeprecationWarningr7compiler9findall)content charset_re pragma_rexml_res r?get_encodings_from_contentrs  M -   @MMMJ IQSQUVVVI Z? @ @F   w ' '   g & & ' NN7 # # $%rBc|d}|d|dd}}i}d}|D]}|}|rs|d}}|d} | dkr=|d| |}|| dzd|}|||<||fS) zReturns content type and parameters from given header :param header: string :return: tuple containing content type and dictionary of parameters r)rrNz"' Trr)r5stripfindlower) headertokens content_typeparams params_dictitems_to_stripparamkeyrindex_of_equalss r?_parse_content_type_headerrs\\#  F!!9??,,fQRRj&LKN--   -C#jjooO"$$,_,-33NCCo122399.II',K $  $$rBc|d}|sdSt|\}}d|vr|ddSd|vrdSd|vrdSdS) z}Returns encodings from given HTTP Header Dict. :param headers: dictionary to extract encoding from. :rtype: str z content-typeNcharsetz'"textz ISO-8859-1zapplication/jsonutf-8)rjrr)headersrrs r?get_encoding_from_headersrs;;~..L t5lCCL&Fi &&u--- |\))w*)rBc#K|j |D]}|VdStj|jd}|D]}||}|r|V|dd}|r|VdSdS)zStream decodes a iterator.Nr6errorsrBT)final)encodingcodecsgetincrementaldecoderrq)iteratorrrdecoderchunkrvs r?stream_decode_response_unicoders z  DJJJJ6f*1:66iHHHG ^^E " "  HHH 4 ( (B rBc#Kd}||dkrt|}|t|kr)||||zV||z }|t|k'dSdS)z Iterate over slices of a string.rN)rJ)string slice_lengthposs r? iter_slicesr&s{ C|q006{{ F  S|++,,,, | F      rBc:tjdtg}t|j}|r; t |j|S#t$r||YnwxYw t |j|dS#t$r |jcYSwxYw)zReturns the requested content back in unicode. :param r: Response object to get unicode content from. Tried: 1. charset from content-type 2. fall back and replace all unicode characters :rtype: str zIn requests 3.0, get_unicode_from_response will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)r6r) rTrUrrrrr UnicodeErrorr TypeError)rtried_encodingsrs r?get_unicode_from_responser0s M -   O)33H- -qy(++ + - - -  " "8 , , , , , -19hy9999 ys#A A+*A+/BBBzBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~c|d}tdt|D]}||dd}t|dkr|rn t t |d}n #t $rtd|zwxYw|tvr|||ddz||<d||z||<d||z||<d |S) zUn-escape any percent-escape sequences in a URI that are unreserved characters. This leaves all reserved, illegal and non-ASCII bytes encoded. :rtype: str %rrrOz%Invalid percent-escape sequence: '%s'N) r5rangerJisalnumchrr2rrUNRESERVED_SETr)uripartsihcs r?unquote_unreservedr Ys  IIcNNE 1c%jj ! ! & & !HQqSM q66Q;;199;;; NAr OO N N N !H1!LMMM NN""uQx|+aq>aU1X~E!HH 775>>s -B  B(cd}d} tt||S#t$rt||cYSwxYw)zRe-quote the given URI. This function passes the given URI through an unquote/quote cycle to ensure that it is fully and consistently quoted. :rtype: str z!#$%&'()*+,/:;=?@[]~z!#$&'()*+,/:;=?@[]~)safe)r r r)rsafe_with_percentsafe_without_percents r? requote_urirqsk/0 5',,3DEEEE 555S3444444 5s$AAc tjdtj|d}|d\}}tjdtjt t |d}tjdtj|d|z}||z||zkS)zThis function allows you to check if an IP belongs to a network subnet Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24 returns False if ip = 192.168.1.1 and net = 192.168.100.0/24 :rtype: bool z=Lrr)structunpacksocket inet_atonr5dotted_netmaskr2)ipnetipaddrnetaddrbitsnetmasknetworks r?address_in_networkr s]4!1"!5!5 6 6q 9FIIcNNMGTmD&"2>#d))3L3L"M"MNNqQGmD&"27";";<I)r inet_ntoarpack)maskrs r?rrs8 b4i1, ,D  FKd33 4 44rBc^ tj|n#tj$rYdSwxYwdS)z :rtype: bool FT)rrerror) string_ips r?is_ipv4_addressr)sD#### <uu 4s **cX|ddkr t|dd}n#t$rYdSwxYw|dks|dkrdS t j|ddn#tj$rYdSwxYwdSdS)zV Very simple check of the cidr format in no_proxy variable. :rtype: bool rrFr"rT)countr2r5rrrr')string_networkr%s r? is_valid_cidrr-s C  A%% ~++C00344DD   55  !88tbyy5   ^11#66q9 : : : :|   55 u 4s#(A AA$-BB%$B%c#K|du}|r.tj|}|tj|< dV|r"|tj|=dS|tj|<dSdS#|r|tj|=n|tj|<wxYw)zSet the environment variable 'env_name' to 'value' Save previous value, yield, and then restore the previous value stored in the environment variable 'env_name'. If 'value' is None, do nothingN)rPrirj)env_namer value_changed old_values r? set_environr2s%M%JNN8,, $ 81   1 Jx((('0 8$$$  1 1= 1 Jx(('0 8$0000s A""#Bcd}|}| |d}t|}|jdS|rd|dddD}t |jr<|D]8}t |rt |j|rdS*|j|krdS9nb|j}|jr|d |jz }|D]4}|j |s| |rdS5td|5 t|j}n#ttjf$rd }YnwxYwdddn #1swxYwY|rdSd S) zL Returns whether we should bypass proxies or not. :rtype: bool ctj|p0tj|SN)rPrirjupper)ks r?z'should_bypass_proxies..s/"*..++Hrz~~aggii/H/HrBNno_proxyTc3K|]}||V dSr5)rbr:s r?rdz(should_bypass_proxies..s;  T       rB r,z:{}F)r hostnamer6r5r)r-r portraendswithr2rrrgaierror) rur9 get_proxy no_proxy_argparsedproxy_iphost_with_portr:bypasss r?should_bypass_proxiesrHs)IHIL9Z(( c]]F t   %--c266<rjscheme)ruproxiesurlparts proxy_keysproxy proxy_keys r? select_proxyrS#s mG}}H {{8?GKK,>,>??? %("338$$ J E   I&E E  LrBpython-requestsc|dtS)zO Return a string representing the default user agent. :rtype: str rr)rs r?default_user_agentrV=s ddKK ((rBcLtttdddS)z9 :rtype: requests.structures.CaseInsensitiveDict z*/*z keep-alive)z User-AgentzAccept-EncodingAccept Connection)rrVDEFAULT_ACCEPT_ENCODINGr;rBr?default_headersr[Fs2 (**2"     rBcg}d}||}|s|Stjd|D]} |dd\}}n#t$r|d}}YnwxYwd|di}|dD]X} |d\}}n#t$rYn0wxYw|||||<Y|||S) zReturn a list of parsed link headers proxies. i.e. Link: ; rel=front; type="image/jpeg",; rel=back;type="image/jpeg" :rtype: list z '"z, * '"r)rr7r5rr) rlinks replace_charsvalrurlinkrrs r?parse_header_linksraRsA EM KK & &E  x&& "))C++KC " " "rCCC "syy**+\\#&& H HE "[[-- UU    .3[[-G-GD=)) * * T Ls#AA! A!B,, B:9B:rhrOc|dd}|tjtjfvrdS|ddtjkrdS|ddtjtjfvrdS|t}|dkrd S|dkr,|dddtkrd S|d ddtkrd S|dkr*|ddtkrd S|d dtkrdSdS)z :rtype: str Nzutf-32rcz utf-8-sigrOzutf-16rrz utf-16-berz utf-16-lez utf-32-bez utf-32-le) r BOM_UTF32_LE BOM_UTF32_BEBOM_UTF8 BOM_UTF16_LE BOM_UTF16_BEr+_null_null2_null3)datasample nullcounts r?guess_json_utfrq}s"1"XF &%v':;;;x bqbzV_$${ bqbzf)6+>???x U##IA~~wA~~ ##A#;& ; !$Q$<6 ! !;A~~ "1":  ; !"":  ; 4rBcft||\}}}}}}|s||}}t||||||fS)zGiven a URL that may or may not have a scheme, prepend the given scheme. Does not replace a present scheme with the one provided as an argument. :rtype: str )r r)ru new_schemerMrrrlrqueryfragments r?prepend_scheme_if_neededrvsN 5=S*4M4M1FFD&% $V vvtVUHE F FFrBct|} t|jt|jf}n#tt f$rd}YnwxYw|S)z{Given a url with authentication components, extract them into a tuple of username,password. :rtype: (str,str) )rr)r rusernamepasswordrtr)rurDauths r?get_auth_from_urlr{sd c]]F(('&/*B*BC I & Ks(:AAs^\S[^\r\n]*$|^$z^\S[^\r\n]*$|^$c |\}}t|trt}nt} ||st d|zdS#t $r&t d|d|dt|wxYw)zVerifies that header value is a string which doesn't contain leading whitespace or return characters. This prevents unintended header injection. :param header: tuple, in the format (name, value). z7Invalid return character or leading space in header: %szValue for header {z: z$} must be of type str or bytes, not N)rpr _CLEAN_HEADER_REGEX_BYTE_CLEAN_HEADER_REGEX_STRr8rrtype)rrrpats r?check_header_validityrsKD%%&&%Jyy b Y\` `aa a b b JJJm/3ttUUUDKKKIJJ JJs 'A0Bct|\}}}}}}|s||}}|ddd}t|||||dfS)zW Given a url remove the fragment and the authentication part. :rtype: str @rrr)r rsplitr)rurMrrrlrrtrus r? urldefragauthrsb 5=SMM1FFD&% $V ]]3 " "2 &F vvtVUB? @ @@rBct|jdd}|Qt|jtr7 ||jdS#t t f$rtdwxYwtd)zfMove file pointer back to its recorded starting position so it can be read again on redirect. rNNz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)rbodyrp_body_positionrrXr4r)prepared_request body_seeks r? rewind_bodyrs(-vt< I&5 6 6 6 6 6! > > >')=>> > >$$QRRRs A!A')Fr5)rT)h__doc__r contextlibrVrPr7rrrrrTr collectionsr urllib3.utilrrrr_internal_utilsr compatr rr r r rrrrrrrrrrrcookiesr structuresr exceptionsrrrrrkwhereDEFAULT_CA_BUNDLE_PATH DEFAULT_PORTSrr5rZplatformr@rGr]r~rrcontextmanagerrrrrrrrrrrrrrr frozensetrr rr rr)r-r2rHrJrSrVr[raencoderkrlrmrqrvr{rr}r~rrrr;rBr?rso  ######%%%%%%$$$$$$------999999????????????????????????????????)(((((++++++GGGGGGGGGGGG# $c** )) BHWll48889JKLL <7%%%N / / /   :3:3:3z6 6 6 6 r&&&B    6<@F2   000%%%(%%%22$!!!JMOO0555, 5 5 55550 111*:::z    4))))   """L  g  @GGG"   "&2:&;<<$"*%788JJJ*AAA" S S S S SrB