File: //proc/thread-self/root/usr/lib/python3.10/http/__pycache__/client.cpython-310.pyc
o
#T_i�� � @ sT d Z ddlZddlZddlZddlZddlZddlZddlZddl Z ddl
Zddlm
Z
g d�ZdZdZdZdZd Zd
Ze� �ejj� dd� ejj�� D �Zd
ZdZdZe�d�jZ e�d�j!Z"e�d�Z#e�d�Z$h d�Z%d@dd�Z&G dd� dej'j(�Z)dd� Z*e)fdd�Z+G dd� dej,�Z-G d d!� d!�Z.zddl/Z/W n e0y� Y nw G d"d#� d#e.�Z1e�2d#� G d$d%� d%e3�Z4G d&d'� d'e4�Z5G d(d)� d)e4�Z6G d*d+� d+e4�Z7G d,d-� d-e4�Z8G d.d/� d/e4�Z9G d0d1� d1e4�Z:G d2d3� d3e4�Z;G d4d5� d5e;�Z<G d6d7� d7e;�Z=G d8d9� d9e;�Z>G d:d;� d;e4�Z?G d<d=� d=e4�Z@G d>d?� d?eAe?�ZBe4ZCdS )Aa�
HTTP/1.1 client library
<intro stuff goes here>
<other stuff, too>
HTTPConnection goes through a number of "states", which define when a client
may legally make another request or fetch the response for a particular
request. This diagram details these state transitions:
(null)
|
| HTTPConnection()
v
Idle
|
| putrequest()
v
Request-started
|
| ( putheader() )* endheaders()
v
Request-sent
|\_____________________________
| | getresponse() raises
| response = getresponse() | ConnectionError
v v
Unread-response Idle
[Response-headers-read]
|\____________________
| |
| response.read() | putrequest()
v v
Idle Req-started-unread-response
______/|
/ |
response.read() | | ( putheader() )* endheaders()
v v
Request-started Req-sent-unread-response
|
| response.read()
v
Request-sent
This diagram presents the following rules:
-- a second request may not be started until {response-headers-read}
-- a response [object] cannot be retrieved until {request-sent}
-- there is no differentiation between an unread response body and a
partially read response body
Note: this enforcement is applied by the HTTPConnection class. The
HTTPResponse class does not enforce this state machine, which
implies sophisticated clients may accelerate the request/response
pipeline. Caution should be taken, though: accelerating the states
beyond the above pattern may imply knowledge of the server's
connection-close behavior for certain requests. For example, it
is impossible to tell whether the server will close the connection
UNTIL the response headers have been read; this means that further
requests cannot be placed into the pipeline until it is known that
the server will NOT be closing the connection.
Logical State __state __response
------------- ------- ----------
Idle _CS_IDLE None
Request-started _CS_REQ_STARTED None
Request-sent _CS_REQ_SENT None
Unread-response _CS_IDLE <response_class>
Req-started-unread-response _CS_REQ_STARTED <response_class>
Req-sent-unread-response _CS_REQ_SENT <response_class>
� N)�urlsplit)�HTTPResponse�HTTPConnection�
HTTPException�NotConnected�UnknownProtocol�UnknownTransferEncoding�UnimplementedFileMode�IncompleteRead�
InvalidURL�ImproperConnectionState�CannotSendRequest�CannotSendHeader�ResponseNotReady�
BadStatusLine�LineTooLong�RemoteDisconnected�error� responses�P i� �UNKNOWN�IdlezRequest-startedzRequest-sentc C s i | ]}||j �qS � )�phrase)�.0�vr r �"/usr/lib/python3.10/http/client.py�
<dictcomp>l s r i �d i s [^:\s][^:\r\n]*s \n(?![ \t])|\r(?![ \t\n])z[ - ]z[ -]> �PUT�POST�PATCH�datac
C sZ z| � d�W S ty, } zt|j|j|j|jd|�� | |j|j� |f �d�d}~ww )z<Call data.encode("latin-1") but show a better error message.�latin-1z`%s (%.20r) is not valid Latin-1. Use %s.encode('utf-8') if you want to send it encoded in UTF-8.N)�encode�UnicodeEncodeError�encoding�object�start�end�title)r"