o
    j                     @   s   d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZmZmZ d dlmZmZmZ G dd deZedkrfg d	ZeD ]'ZeeZee ed
e  ede   ee ek ed q@dS dS )    )stat)connect)	UniTargetUniProtounitarget_url_params)urlparseparse_qsurljoin	urlencode
urlunparse)str_oneint_onebool_onec                   @   st   e Zd Zdejdddddddddfdedededefdd	Zd
d Zdd Zdd Z	dd Z
edd Zdd ZdS )
HTTPTargetP   N
   dnsdc_ipdomainhostnamec                 C   s0   t j| ||||||||
|	|d || _|| _d S )N)r   ssl_ctxproxiesr   r   r   )r   __init__pathquery)selfipportprotocolr   r   r   timeoutr   r   r   r   r    r    /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/unicomm/protocol/client/http/commons/target.pyr      s    
zHTTPTarget.__init__c                 C   s   d|   | jf S )Nz
HTTP/%s@%s)get_hostname_or_ipr   r   r    r    r!   to_target_string   s   zHTTPTarget.to_target_stringc                 C   sz   | j tjkr	d}n| j tjkrd}|dkr"| jdkr"d||  f S |dkr3| jdkr3d||  f S d||  | jf S )Nhttpshttpr   z%s://%s  z
%s://%s:%s)r   r   CLIENT_SSL_TCP
CLIENT_TCPr   r"   )r   protor    r    r!   get_host   s   zHTTPTarget.get_hostc                 C   sJ   t |  | j}| jd ur#t| jdkr#t|}|j| jd}t|}|S )Nr   )r   )r	   r+   r   r   lenr   _replacer   )r   url
parsed_urlnew_parsed_urlr    r    r!   get_url   s   zHTTPTarget.get_urlc                 C   s   | j tjkS )N)r   r   r(   r#   r    r    r!   is_ssl#   s   zHTTPTarget.is_sslc                 C   s\  t | }g }|j dD ]}||dd q|d dkr&tj}d}n|d dkr2tj}d}nt	d	|d  |j
r@|j
}|d u rHt	d
d }|jdvrR|j}t| ||i \}}dddd}	|	t |	| t|j}
|
D ]}|ddu rd|	|< qs|	D ]}|
|d  qt|
dd}t|j|j
|j|||j|j|j|j|j|j|jd}|S )N+-_r   HTTPr   HTTPSr'   zUnknown protocol! %szPort must be provided!)/ N   )dcr   dcipproxyT)doseq)r   r   r   r   r   r   r   r   r   r   r   )r   schemeuppersplitappendreplacer   r)   r(   	Exceptionr   r   r   from_urlupdater   r   r   
startswithpopr
   r   r   r   r   r   r   r   r   r   r   )connection_urlurl_eschemesitemr   r   r   	unitargetextraparamsparams_to_removeparsed_queryparam	new_querytargetr    r    r!   rE   &   sZ   



zHTTPTarget.from_urlc                 C   s*   d}| j D ]}|d|| j | f 7 }q|S )Nz==== HTTPTarget ====
z%s: %s
)__dict__)r   tkr    r    r!   __str___   s   
zHTTPTarget.__str__)__name__
__module____qualname__r   r)   strr   r$   r+   r1   r2   staticmethodrE   rW   r    r    r    r!   r      s    4
8r   __main__) zhttp://test.corp:80zhttps://test.corp:80zhttp://test.corp:443zhttps://test.corp:443zhttp://test.corp:80/zhttps://test.corp:80/zhttp://test.corp:443/zhttps://test.corp:443/zhttp://test.corp:80/pathzhttps://test.corp:80/pathzhttp://test.corp:443/pathzhttps://test.corp:443/pathzhttp://test.corp:80/path?queryzhttps://test.corp:80/path?queryzhttp://test.corp:443/path?queryz https://test.corp:443/path?queryz http://test.corp:80/path?query=1z!https://test.corp:80/path?query=1z!http://test.corp:443/path?query=1z"https://test.corp:443/path?query=1z)http://test.corp:80/path?query=1&query2=2z*https://test.corp:80/path?query=1&query2=2z*http://test.corp:443/path?query=1&query2=2z+https://test.corp:443/path?query=1&query2=2z2http://test.corp:80/path?query=1&query2=2&query3=3z3https://test.corp:80/path?query=1&query2=2&query3=3z3http://test.corp:443/path?query=1&query2=2&query3=3z4https://test.corp:443/path?query=1&query2=2&query3=3z;http://test.corp:80/path?query=1&query2=2&query3=3&query4=4z<https://test.corp:80/path?query=1&query2=2&query3=3&query4=4zHhttp+ntlm-password://test.corp:443/path?query=1&query2=2&query3=3&query4zIhttp+ntlm-password://test.corp:443/path?query=1&query2=2&query3=3&proxy=1zOriginal: %szReconstr: %sz------------------N)osr   sqlite3r   asysocks.unicomm.common.targetr   r   r   urllib.parser   r   r	   r
   r   %asysocks.unicomm.utils.paramprocessorr   r   r   r   rX   testr.   rE   resprintr1   r    r    r    r!   <module>   s"    _#

$