
    3 d                        d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	  G d de j
                  Z e            Ze                    d           e                    d	d
dd           e                    ddd           e                    dddd           e                    ddd           dgddgddgddggZeD ]Z ej        ed d!i d" Z	 d(d$ed%ed&efd'ZdS ))    N)SimpleCookie)split)urlparse)basic_auth_headerc                       e Zd Zd ZdS )
CurlParserc                 *    d| }t          |          )Nz-There was an error parsing the curl command: )
ValueError)selfmessage	error_msgs      1lib/python3.11/site-packages/scrapy/utils/curl.pyerrorzCurlParser.error   s    MGMM	###    N)__name__
__module____qualname__r    r   r   r   r   
   s#        $ $ $ $ $r   r   urlz-Hz--headerheadersappend)destactionz-Xz	--requestmethod)r   z-dz--dataz
--data-rawdataz-uz--userauthz--compressedz-sz--silentz-vz	--verbosez-#z--progress-barr   
store_truec                    g }i }| j         pdD ]}|                    dd          \  }}|                                }|                                }|                                dk    r2t	          |                                          D ]\  }}|j        ||<   |                    ||f           | j        rC| j                            dd          \  }}|                    dt          ||          f           ||fS )Nr   :   CookieAuthorization)
r   r   striptitler   itemsvaluer   r   r   )	parsed_argsr   cookiesheadernamevalmorseluserpasswords	            r   _parse_headers_and_cookiesr/   %   s   GG%+ ( (LLa((	czz||iikk::<<8# 	( ,S 1 1 7 7 9 9 - -f &- NND#;'''' M$)//Q77h):4)J)JKLLLGr   Tcurl_commandignore_unknown_optionsreturnc                 "   t          |           }|d         dk    rt          d          t                              |dd                   \  }}|r>dd                    |           }|rt          j        |           nt          |          |j        }t          |          }|j	        sd|z   }|j
        pd	}|                                |d
}	t          |          \  }
}|
r|
|	d<   |r||	d<   |j        r|j        |	d<   |j
        sd|	d<   |	S )a  Convert a cURL command syntax to Request kwargs.

    :param str curl_command: string containing the curl command
    :param bool ignore_unknown_options: If true, only a warning is emitted when
                                        cURL options are unknown. Otherwise
                                        raises an error. (default: True)
    :return: dictionary of Request kwargs
    r   curlz%A curl command must start with "curl"r    NzUnrecognized options: z, zhttp://GET)r   r   r   r(   bodyPOSTr   )r   r
   curl_parserparse_known_argsjoinwarningswarnr   r   schemer   upperr/   r   )r0   r1   	curl_argsr'   argvmsgr   
parsed_urlr   resultr   r(   s               r   curl_to_request_kwargsrD   9   sK    l##I|v B@AAA#44Yqrr]CCK "8tyy88! 	"M#S//!
/C #J #o(5Fs33F1+>>GW $#y $#y &$)v! 	&  &F8Mr   )T)argparser;   http.cookiesr   shlexr   urllib.parser   
w3lib.httpr   ArgumentParserr   r8   add_argumentsafe_to_ignore_argumentsargumentr/   strbooldictrD   r   r   r   <module>rQ      s     % % % % % %       ! ! ! ! ! ! ( ( ( ( ( ($ $ $ $ $( $ $ $ jll         z	(  K K K   {  : : :   xF  C C C   xf  5 5 5  
:	;	  ) = =HKh<|<<<<  * 7;3 33/33	3 3 3 3 3 3r   