o
    øT·j¬  ã                   @   sÀ   d dl Z d dlZd dlZddlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZmZmZmZ ddlmZ g d¢Zd	e jd
dfdd„Zd	e jd
dfdd„Zddd„Zd
e jfdd„Zddd„ZdS )é    Né   )Úprint_doctor)Úadd_pro_parsersÚhandle_pro_command)Ú
handle_runÚparse_http_file)ÚSUPPORTED_METHODSÚParsedItemsÚparse_request_itemsÚprocess_url)Úhandle_request)Úbuild_parserÚmainr   r   r   r   r   r
   r   r   r   r	   ÚparserÚreturnc                 C   s¢  |   ¡ }|jdddddd� |jdddd	d
� |jdddd
� |   ¡ }|jddddd� |jddddd� |jddddd
� |jddddd
� |jdddddd� | jdd dd!d
� | jd"d#dd$d%� | jd&d'dd(d%� | jd)tjd*d+d,� | jd-dd.d%� | jd/tdd0d1� | jd2tjd*d3d,� | jd4td5d6d1� | jd7d8d9d:d%� |   ¡ }|jd;d<d=d>d?d@� |jdAd<dBd>dCd@� |jdDd<dEd>dFd@� |jdGd<dHd>dId@� dS )Jz.Add flags shared by all HTTP verb subcommands.z--jsonz-jÚ
store_trueÚ	json_modez/(default) Serialize data items as a JSON object)ÚactionÚdestÚhelpz--formz-fz#Serialize data items as form fields)r   r   z--multipartzForce multipart form dataz	--headersÚheaders_onlyzPrint response headers onlyz--bodyÚ	body_onlyzPrint response body onlyz	--verbosez-vz+Print request and response headers and bodyz--quietz-qz!Suppress all output except errorsz--printz-pÚ
print_specNzGOutput control: H(req headers) B(req body) h(resp headers) b(resp body))r   Údefaultr   z
--downloadz-dzDownload response body to filez--outputz-ozOutput file path)r   r   z--authz-azuser:passwordz--verifyTzSSL certificate verification©r   r   r   z--proxyz	Proxy URLz	--timeoutzRequest timeout in seconds)Útyper   r   z--followzFollow redirectsz--max-redirectsé   zMaximum number of redirectsz--impersonatez-iÚchromezBrowser to impersonatez	--http1.1Ústore_constÚv1Úhttp_versionzUse HTTP/1.1)r   Úconstr   r   z--http2Úv2z
Use HTTP/2z--http3Úv3z
Use HTTP/3z--http3-onlyÚv3onlyz3Use HTTP/3 only (no fallback to HTTP/2 or HTTP/1.1))Úadd_mutually_exclusive_groupÚadd_argumentÚargparseÚBooleanOptionalActionÚfloatÚint)r   Úcontent_groupÚoutput_groupÚhttp_version_group© r.   úY/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/curl_cffi/cli/__init__.pyÚ_add_common_flags    sî   ûüýüüüüûüüüüüüûûû
ûr0   c                 C   s&   | j dddd� | j ddddd	� d
S )z*Add URL and request items positional args.ÚurlÚURLzRequest URL©Úmetavarr   ÚitemsÚITEMÚ*zYRequest items: Header:Value, param==value, field=value, field:=json, @file, +cookie=value)r4   Únargsr   N)r&   )r   r.   r.   r/   Ú_add_request_positionals    s   
ûr9   c                  C   s8   t j tjd ¡} | dv rd} td| › d| › d�ƒ d S )Nr   )z__main__.pyz-mú	curl-cffizUsage: a   <command> [options]

HTTP request CLI with browser impersonation.

HTTP verbs:
  get, post, put, delete, patch    Make an HTTP request
  head, options, trace, query      (case-insensitive)

Request items (for HTTP verb commands):
  Header:Value   HTTP header
  param==value   Query parameter
  field=value    Data field
  field:=json    Raw JSON field
  @file          File upload
  +key=value     Cookie

Tools:
  run FILE                         Run requests from .http or .har file
  doctor                           Dump diagnostic information

Fingerprints:
  update                           Update local fingerprints cache
  list                             List local and native fingerprints
  config                           Configure API access for Pro fingerprints

Run 'z5 <command> --help' for details on a specific command.)ÚosÚpathÚbasenameÚsysÚargvÚprint)Úprogr.   r.   r/   Ú_print_help®   s   ÿærB   c                  C   sî   t jddd�} | jddddd� | jd	d
�}ttƒD ]$}| ¡ |fD ]}|j|d|› d�d�}t|ƒ t	|ƒ |j
|d� q"q|jddd�}|j
d d� t|ƒ |jddt jd�}|jdddd� |jdt jddd� t	|ƒ |j
d d� | S )Nr:   F)rA   Úadd_helpz-hz--helpr   Ú	show_help)r   r   Úcommand)r   zMake an HTTP z	 request.)Údescription)ÚmethodÚdoctorz*Dump diagnostic information for debugging.Úruna%  Run requests from a file.

Supported formats (auto-detected by extension):
  .http / .rest   HTTP Request in Editor format
  .har            HAR (HTTP Archive) format

HTTP file format:
  ### (request separator)
  POST http://example.com/api
  Content-Type: application/json

  {"key": "value"}
  ###
  GET http://example.com

Har file:
  Chrome exported HAR files do not contain cookies and auth headers by default. To include them:

  In DevTools settings: Gear Icon -> Preferences -> Network -> select "Allow to generate HAR with sensitive data"
)rF   Úformatter_classÚfileÚFILEzPath to .http or .har filer3   z	--sessionTzYUse a single session for all requests, sharing cookies and connections (default: enabled)r   )r'   ÚArgumentParserr&   Úadd_subparsersÚsortedr   ÚlowerÚ
add_parserr9   r0   Úset_defaultsr   ÚRawDescriptionHelpFormatterr(   )r   Ú
subparsersrG   ÚnameÚsubr.   r.   r/   r   Ï   sJ   þ
þù	þéû	r   c                  C   sz   t ƒ } |  ¡ }|jd u st|ddƒrtƒ  t d¡ |jdkr$tƒ  d S t|ƒr*d S |jdkr5t	|ƒ d S t
||jƒ d S )NrD   Fr   rH   rI   )r   Ú
parse_argsrE   ÚgetattrrB   r>   Úexitr   r   r   r   rG   )r   Úargsr.   r.   r/   r     s   


r   )r   N)r'   r;   r>   rH   r   Úpror   r   rI   r   r   Úparser   r	   r
   r   Úrequestr   Ú__all__rM   r0   r9   rB   r   r   r.   r.   r.   r/   Ú<module>   s     
!D