File: //lib/python3/dist-packages/twisted/web/__pycache__/client.cpython-38.pyc
U
s�@g) � @ s> d Z ddlmZmZ ddlZddlZddlZzddlmZm Z m
Z
W n8 ek
r| ddlm Z m
Z
ddlmZ
dd� ZY nX dd lmZ dd
lmZ ddlmZ ddlmZmZ dd
lmZmZmZmZ ddlmZmZmZ ddlm Z ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl#m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZD G dd� de6jE�ZFG dd � d e$jG�ZHG d!d"� d"eH�ZIG d#d$� d$e'jJ�ZKG d%d&� d&eK�ZLG d'd(� d(eM�ZNd)d*� ZOdxd+d,�ZPd-ZQd.d/� ZReR� ee"d0d1d2d�eQ�dyd3d4��ZSee"d0d1d2d�eQ�dzd5d6��ZTdd7lUmVZV dd8lBmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa zdd9lbmcZc W n ek
�r� dZcY nX dd:ldmeZemfZfmgZg d;d<� ZhG d=d>� d>eM�Ziee<�G d?d@� d@eM��Zjee"d0dAdd�eeie"d0dAdd�ejdB��kdC�dD eijleijm� ee.�G dEdF� dFeM��Znee<�G dGdH� dHeM��Zoee;�G dIdJ� dJeM��ZpG dKdL� dLe'jq�ZrG dMdN� dNeM�ZsG dOdP� dPeM�ZtG dQdR� dReM�Zuee:�G dSdT� dTeM��Zvee9�G dUdV� dVeu��Zwee9�G dWdX� dXeu��ZxG dYdZ� dZeM�ZyG d[d\� d\eM�Zzee9�G d]d^� d^eM��Z{G d_d`� d`e5e=��Z|G dadb� dbe5e-��Z}ee9�G dcdd� ddeM��Z~e?� jZ�e�dedfdgdhdig�Z�ee9�G djdk� dkeM��Z�G dldm� dme��Z�G dndo� doe'j��Z�dpdq� Z�dVdmddd^d6d4d`d$dPd&d"d ddXdqdkdrdsdtdudvdwd(gZ�dS ){z
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 �4/usr/lib/python3/dist-packages/twisted/web/client.py�
<listcomp> s zurlunparse.<locals>.<listcomp>r )�_urlunparse�tuple�encode)�parts�resultr r r r s r )�implementer)�Iterable)�wraps)�_PY3�
networkString)�nativeString�
intToBytes�unicode�
itervalues)�
deprecated�deprecatedModuleAttribute�getDeprecationWarningString)�Failure)�Version)�http)�defer�protocol�task�reactor)�
isIPv6Address)� IProtocol�IOpenSSLContextFactory)�HostnameEndpoint�
wrapClientTLS)�InsensitiveDict)�proxyForInterface)�error)�UNKNOWN_LENGTH�IAgent�IAgentEndpointFactory�
IBodyProducer�IPolicyForHTTPS� 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 r8 ? s r8 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)� hosts
user-agent� 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 }| jj�� D ]:\}}|�� | jk�r| �
||� |�� d
kr�|�|� q�| jj�� D ]\}}|�|d | � �q<|�rr| �
dd�|�� | �� i | _|d k �r�| j�|� d S )N�method� GET� http�P � :� https� s Hostr>