Your IP : 216.73.216.213
B
��d^�- � @ sJ d Z ddlmZmZ ddlZddlZddlZyddlmZm Z m
Z
W n8 ek
r| ddlm Z m
Z
ddlmZ
dd� ZY nX ddlZdd lmZ dd
lmZ ddlmZmZ ddlmZmZmZmZ dd
lmZmZ ddlmZ ddlm Z ddl!m"Z"m#Z# ddlm$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl%m8Z8 ddl!m9Z9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZBmCZC G dd� de8jD�ZEG d d!� d!e&jF�ZGG d"d#� d#eG�ZHG d$d%� d%e)jI�ZJG d&d'� d'eJ�ZKG d(d)� d)eL�ZMd*d+� ZNdvd,d-�ZOd.ZPd/d0� ZQeQ� ee d1d2d3d�eP�dwd4d5��ZRee d1d2d3d�eP�dxd6d7��ZSdd8lTmUZU dd9lAmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` ydd:lambZb W n ek
�r� dZbY nX dd;lcmdZdmeZemfZf d<d=� ZgG d>d?� d?eL�Zhee"�G d@dA� dAeL��Ziee d1dBdd�e$ehe d1dBdd�eidC��jdD�dE ehjkehjl� ee"�G dFdG� dGeL��Zmee0�G dHdI� dIeL��Znee"�G dJdK� dKeL��Zoee;�G dLdM� dMeL��ZpG dNdO� dOe)jq�ZrG dPdQ� dQeL�ZsG dRdS� dSeL�ZtG dTdU� dUeL�Zuee#�G dVdW� dWeL��Zvee:�G dXdY� dYeu��Zwee:�G dZd[� d[eu��ZxG d\d]� d]eL�ZyG d^d_� d_eL�Zzee:�G d`da� daeL��Z{G dbdc� dce7e<��Z|G ddde� dee7e/��Z}ee:�G dfdg� dgeL��Z~ee:�G dhdi� dieL��ZG djdk� dke�Z�G dldm� dme)j��Z�dndo� Z�dYdAdkdgdad7d5dcd%dSd'd#d!dd[dodidpdqdrdsdtdud)gZ�dS )yz
HTTP client.
� )�division�absolute_importN)�
urlunparse�urljoin� urldefrag)r r )r c C s t tdd� | D ���}|�d�S )Nc S s g | ]}|� d ��qS )�charmap)�decode)�.0�p� r �E/opt/alt/python37/lib64/python3.7/site-packages/twisted/web/client.py�
<listcomp> s zurlunparse.<locals>.<listcomp>r )�_urlunparse�tuple�encode)�parts�resultr r r r s r )�wraps)�implementer)�_PY3�
networkString)�nativeString�
intToBytes�unicode�
itervalues)�deprecatedModuleAttribute�
deprecated)�Failure)�Version)�IPolicyForHTTPS�IAgentEndpointFactory)�getDeprecationWarningString)�http)�defer�protocol�task�reactor)�
isIPv6Address)� IProtocol�IOpenSSLContextFactory)�HostnameEndpoint�
wrapClientTLS)�InsensitiveDict)�proxyForInterface)�error)�UNKNOWN_LENGTH�IAgent�
IBodyProducer� IResponse)�Headers)�Logger)�_ensureValidURI�_ensureValidMethodc @ s e Zd ZdZdS )�PartialDownloadErrorz�
Page was only partially downloaded, we got disconnected in middle.
@ivar response: All of the response body which was downloaded.
N)�__name__�
__module__�__qualname__�__doc__r r r r r7 6 s r7 c @ s� e Zd ZdZdZdZdZdZed�Z dd� Z
dd� Zd d
� Zdd� Z
d
d� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zd S )!�HTTPPageGettera�
Gets a resource via HTTP, then quits.
Typically used with L{HTTPClientFactory}. Note that this class does not, by
itself, do anything with the response. If you want to download a resource
into a file, use L{HTTPPageDownloader} instead.
@ivar _completelyDone: A boolean indicating whether any further requests are
necessary after this one completes in order to provide a result to
C{self.factory.deferred}. If it is C{False}, then a redirect is going
to be followed. Otherwise, this protocol's connection is the last one
before firing the result Deferred. This is used to make sure the result
Deferred is only fired after the connection is cleaned up.
r T)s hosts
user-agents cookies content-lengthc C s� t t| jdd��}| �|t| jj�� | jjdkrX| jjdkrX| jjd t | jj� }n:| jjdkr�| jjdkr�| jjd t | jj� }n| jj}| �
d| jj�d |�� | �
d
| jj
� t| jdd �}|d k r�| �
dt t|��� g }xJ| jj�� D ]:\}}|�� | jk�r| �
||� |�� d
kr�|�|� q�W x,| jj�� D ]\}}|�|d | � �qBW |�rz| �
dd�|�� | �� i | _|d k �r�| j�|� d S )N�methods GETs http�P � :s httpsi� s Hosts hosts
User-Agent�postdatas Content-Lengths cookie� =s Cookies ; )r6 �getattr�factoryZsendCommandr5 �path�scheme�port�hostr Z
sendHeader�headers�get�agent�len�items�lower�_specialHeaders�append�cookies�joinZ
endHeaders� transport�write) �selfr= rG �dataZ
cookieData�key�value�cookieZcookvalr r r �connectionMadeX s4
zHTTPPageGetter.connectionMadec C s$ |� � }| j�|g �}|�|� dS )a(
Called every time a header is received. Stores the header information
as key-value pairs in the C{headers} attribute.
@type key: C{str}
@param key: An HTTP header field name.
@type value: C{str}
@param value: An HTTP header field value.
N)rM rH �
setdefaultrO )rT rV rW �lr r r �handleHeaderx s zHTTPPageGetter.handleHeaderc C s* ||| | _ | _| _| j�|||� dS )aJ
Handle the HTTP status line.
@param version: The HTTP version.
@type version: L{bytes}
@param status: The HTTP status code, an integer represented as a
bytestring.
@type status: L{bytes}
@param message: The HTTP status message.
@type message: L{bytes}
N)�version�status�messagerC � gotStatus)rT r] r^ r_ r r r �handleStatus� s zHTTPPageGetter.handleStatusc C s0 | j �| j� t| dt| j� | j�}|� d S )NZ
handleStatus_)rC �
gotHeadersrH rB r r^ �handleStatusDefault)rT �mr r r �handleEndHeaders� s zHTTPPageGetter.handleEndHeadersc C s d S )Nr )rT r r r �handleStatus_200� s zHTTPPageGetter.handleStatus_200c C s | � � S )N)rf )rT r r r �<lambda>� � zHTTPPageGetter.<lambda>c C s | � � S )N)rf )rT r r r rg � rh c C s
d| _ d S )N� )�failed)rT r r r rc � s z"HTTPPageGetter.handleStatusDefaultc C s, | j �d�}|s| �� d S |d }| jr�| j jd7 _| jj| jjkr�tj| j d|d�}| j�
t|�� d| _| j
�� d S d| _| j�|� | jjdkr�dd lm} |�� }t�t| jj�| jj| j|� nt�t| jj�| jj| j� n(| �� | j�
ttj| j | j|d��� d| _| j
�� d S )
Ns locationr ri s Infinite redirection detected)�locationTFs https)�ssl)rH rI rc �followRedirectrC �_redirectCount�
redirectLimitr. �InfiniteRedirectionr^ �noPager � quietLossrR �loseConnection�_completelyDone�setURLrE �twisted.internetrl �ClientContextFactoryr&