
    9i,                     (   S r SSKJrJrJr  SSKJrJr  SSKrSSK	r
SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr   SSKJr  \R8                  " \5      rSS jrS r S r! SS jr"g! \ a	    SSKJr   N2f = f)z=
This module provide http request function for bce services.
    )	iteritemsiterkeys
itervalues)strbytesN)compat)utils)BceResponse)BceHttpClientError)BceServerError)BceClientError)http_headers)urlparsec                    [         R                  " U5      nU R                  [        R                  R
                  R                  :X  a|  U(       aT  U(       aM  [        R                  SXE4-  5        [        R                  R                  XEUS-  S9nUR                  X5        U$ [        R                  R                  XUS-  S9$ U R                  [        R                  R                  R                  :X  a|  U(       aT  U(       aM  [        R                  SX4-  5        [        R                  R                  XEUS-  S9nUR                  X5        U$ [        R                  R                  XUS-  S9$ [        SU -  5      e)z
:param protocol
:type protocol: baidubce.protocol.Protocol
:param endpoint
:type endpoint: str
:param connection_timeout_in_millis
:type connection_timeout_in_millis int
zUsing proxy host: %s, port: %d  )hostporttimeout7Invalid protocol: %s, either HTTP or HTTPS is expected.)r   convert_to_stringnamebaidubceprotocolHTTP_loggerdebughttpclientHTTPConnection
set_tunnelHTTPSHTTPSConnection
ValueError)r   r   r   connection_timeout_in_millis
proxy_host
proxy_portconns          ]/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/baidubce/http/bce_http_client.py_get_connectionr)   (   sZ    ##D)D}}))..333*MM:j=UUV;;--:6RUY6Y . [DOOD'K{{))*F*M * O 	O	(++1166	6*MM:d\IJ;;..J7SVZ7Z / \DOOD'K{{***F*M + O 	O EPR 	R    c                    [         R                  " U5      n[         R                  " U5      nU R                  XSSS9  [        U5       HB  u  pg[        R
                  " U5      n[        R
                  " U5      nU R                  Xg5        MD     U R                  5         U(       a  [        U[        [        45      (       a!  U R                  U5        U R%                  5       $ [        U[        R                     5      nSn	X:  ah  X-
  n
X:  a  Un
UR                  U
5      nU(       d  [!        SU	[        R                  U4-  5      eU R                  U5        U	[#        U5      -  n	X:  a  Mh  U R%                  5       $ )NT	skip_hostskip_accept_encodingr   z9Insufficient data, only %d bytes available while %s is %d)r   r   
putrequestr   r	   convert_to_standard_string	putheader
endheaders
isinstancer   r   sendintr   CONTENT_LENGTHreadr   lengetresponse)r'   http_methoduriheadersbodysend_buf_sizekvtotalsentsizebufs               r(   _send_http_requestrE   I   sQ    **;7K

"
"3
'COOK4OP'",,Q/,,Q/q # 	OOdUCL))IIdO    ; ;<=ED,|'(Diio(S ,"="=uWF FG G 		#C  , r*   c                     [        U 5       HO  u  p[        U[        [        45      (       d  M"  S[        R
                  " U5      ;   d  M>  [        SU< SU< 35      e   g)zR
   check value in headers, if 
in value, raise
   :param headers:
   :return:
      
z'There should not be any "\n" in header[z]:N)r   r3   r   r   r   convert_to_bytesr   )r<   r?   r@   s      r(   check_headersrI   k   sK     '"a%&&0033 UVXY!Z[[ #r*   c	           	      <   [         R                  SX4XgU5        U=(       d    0 nS[        R                  " [        R
                  5      < S[        R                  < S[        R                  < 3n	U	R                  SS5      n	[        R                  " U	5      n	X[        R                  '   Sn
[        R                  U;  a  Sn
U R                  nU(       a  U R                  nX[        R                   '   [#        U[$        5      (       a  UR'                  [        R(                  5      nU(       d  SU[        R*                  '   Ob[#        U[,        5      (       a  [/        U5      U[        R*                  '   O0[        R*                  U;  a  [1        S	[        R*                  -  5      eS
n[3        US5      (       a!  [3        US5      (       a  UR5                  5       n[6        R8                  " XR:                  5      u  pnX[        R                   '   XR:                  R<                  :w  a2  U[        R                   ==   S[        R                  " U5      -   -  ss'   U" U R>                  X4Xg5      U[        R@                  '   [6        RB                  " US5      n[/        U5      S:  a	  US-   U-   nOUn[E        U5        Sn/ n S
n U
SL a&  [6        RF                  " 5       U[        R                  '   U" U R>                  X4Xg5      U[        R@                  '   US:  a  Ub  URI                  U5        [K        XXRL                  U RN                  U RP                  5      n[         R                  SUUXgU5        [S        UUUXeU RT                  5      nURW                  5       n[        RX                  (       a  [#        U[Z        5      (       as  / nU Hi  u  nnUR'                  S5      R]                  S5      nUR'                  S5      R]                  S5      nUR_                  5       nURa                  UU45        Mk     Un[         R                  SURb                  U4-  5        [e        5       nU Rf                  (       a  URi                  [k        U5      5        OURm                  [k        U5      5        U Rn                  (       Ga  US:X  Ga  SURb                  s=::  a  S:  Gao  O  GOkU VVs0 s H	  u  nnUU_M     nnnSU;   GaL  URq                  S5      n[         R                  SU5        [s        U5      nURt                  [        R:                  Rv                  Rt                  :X  a6  [x        Rz                  R}                  UR~                  U RL                  S-  S9nOvURt                  [        R:                  R                  Rt                  :X  a6  [x        Rz                  R                  UR~                  U RL                  S-  S9nO[1        SU-  5      eUR                  SUR                  S-   UR                  -   SSS9  UR                  5       nU H  nU" UU5      (       d  M    U$    U$ s  snnf ! [         Ga  n Ub  UR                  5         URa                  SR                  S [        R                  " 5       R                  5        5       5      5        [#        U [        5      (       a%  U R                  n!U R                  n"U R                  n#OS
n!S
n"S
n#U R                  R                  U U5      (       a:  U R                  R                  U U5      n$[        R                  " U$S-  5         S
n A O)[        S USR                  U5      4-  U U"U#U!S!9eS
n A ff = fUS"-  nGM  )#a'  
Send request to BCE services.

:param config
:type config: baidubce.BceClientConfiguration

:param sign_function:

:param response_handler_functions:
:type response_handler_functions: list

:param request:
:type request: baidubce.internal.InternalRequest

:return:
:rtype: baidubce.BceResponse
s   %s request start: %s %s, %s, %szbce-sdk-python//
 FTr   s   No %s is specified.Ntellseek   :   ?z=request args:method=%s, uri=%s, headers=%s,patams=%s, body=%szlatin-1zutf-8z%request return: status=%d, headers=%ss   GETi,  i  locationz+request auto follow redirect location is %sr   )r   r   GET?r,   c              3   ,   #    U  H
  nS U-   v   M     g7f)z>>>>N ).0lines     r(   	<genexpr>send_request.<locals>.<genexpr>  s     #b>adFTM>as   g     @@zEUnable to execute HTTP request. Retried %d times. All trace backs:
%s)
request_id   )Vr   r   r   r   r   SDK_VERSIONsysversionplatformreplacerH   r   
USER_AGENTBCE_DATEendpointbackup_endpointHOSTr3   r   encodeDEFAULT_ENCODINGr6   r   r8   r#   hasattrrN   r	   parse_host_portr   default_portcredentialsAUTHORIZATIONget_canonical_querystringrI   get_canonical_timerO   r)   connection_timeout_in_millsr%   r&   rE   r>   
getheadersPY3listdecodelowerappendstatusr
   under_line_headersset_metadata_from_headersdict'set_metadata_from_headers_no_underlinedauto_follow_redirectgetr   r   r   r   r   r   netlocr!   r"   requestpathqueryr9   	Exceptionclosejoin	traceback
format_exc
splitlinesr   r[   status_codecoderetry_policyshould_retry%get_delay_before_next_retry_in_millistimesleepr   )%configsign_functionresponse_handler_functionsr:   r   r=   r<   paramsuse_backup_endpoint
user_agentshould_get_new_daterequest_endpointoffsetr   r   r   encoded_paramsr;   retries_attemptederrorsr'   http_responseheaders_list
temp_headsr?   r@   responseheaders_maprR   
parsed_urlredirect_connhandler_functioner[   r   r   delay_in_milliss%                                        r(   send_requestr   w   s   , MM4Wd<mG 	  !5!56S\\SJ##D"-J((4J'1L##$G+"!11!1L${{8445/0++,	D%	 	 /24y++,		$	$G	3/,2M2MMNNFtVv!6!6 001A??SHD!%L+++!!"dV-D-DT-J&JJ"*7Kw+@GL&&' 44VUCN
>QTkN*'F
W	Z"d*161I1I1K--.2?""Kw3HGL../ !1$);		&!"849[9[#)#4#4f6G6GIDMMY%sGTC /k3v7K7KMM )335L zzjt<<
(DAq+227;A+227;A	A%%q!f-	 )
  *MM7=;O;OQ]:^^`"}H((2243EF@@lAST***&(c]5I5I.OC.O.O4@"ALDAq1a4LK"A![0#.??:#>&SU]^%-h%7
#==H,=,=,B,B,G,GG,0KK,F,FzGXGX$*$F$F$M -G -OM%]]h.?.?.E.E.J.JJ,0KK,G,G
HYHY$*$F$F$M -H -OM #--fiq-q"rr%--eZ__s5JZM]M]5]&* . G(5(A(A(C$> #M8<<O %? O' #B(  	Z

 MM$))#bi>R>R>T>_>_>a#bbc!^,,\\
mmvv!
"""//3DEE"("5"5"["[(#*

?V344( *@CTCG99VCTCV*VWXCNPTNX	Z Z'	Z2 	Qw s?   H#Y, $Y&4E'Y, Y, "Y, &Y, ,^7C1^-!^^)NN)F)#__doc__future.utilsr   r   r   builtinsr   r   logginghttp.clientr   r^   r   r   r   r   r	   baidubce.bce_responser
   baidubce.exceptionr   r   r   baidubce.httpr   urllib.parser   ImportError	getLogger__name__r   r)   rE   rI   r   rV   r*   r(   <module>r      s    9 8    
      - 1 - - &"% 

H
%RBD	\  GL	dk  "!"s   B BB