509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„j*Ü  ã               @   sn  d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 ddddddd	d
ddddddddddgZdZdZdZdZdZdZeƒ jejjƒ dd„ ejjjƒ D ƒZdZdZdZejd ƒjZejd!ƒjZejd"ƒZ ejd#ƒZ!d$d%d&hZ"dBd(d)„Z#G d*d+„ d+ej$j%ƒZ&d,d-„ Z'e&fd.d/„Z(G d0d„ dej)ƒZ*G d1d„ dƒZ+yd dl,Z,W n e-k
�rh   Y nX G d2d3„ d3e+ƒZ.ej/d3ƒ G d4d„ de0ƒZ1G d5d„ de1ƒZ2G d6d„ de1ƒZ3G d7d„ de1ƒZ4G d8d„ de1ƒZ5G d9d	„ d	e1ƒZ6G d:d
„ d
e1ƒZ7G d;d„ de1ƒZ8G d<d„ de8ƒZ9G d=d„ de8ƒZ:G d>d„ de8ƒZ;G d?d„ de1ƒZ<G d@d„ de1ƒZ=G dAd„ de>e<ƒZ?e1Z@dS )Cé    N)ÚurlsplitÚHTTPResponseÚHTTPConnectionÚHTTPExceptionÚNotConnectedÚUnknownProtocolÚUnknownTransferEncodingÚUnimplementedFileModeÚIncompleteReadÚ
InvalidURLÚImproperConnectionStateÚCannotSendRequestÚCannotSendHeaderÚResponseNotReadyÚBadStatusLineÚLineTooLongÚRemoteDisconnectedÚerrorÚ	responseséP   i»  ZUNKNOWNZIdlezRequest-startedzRequest-sentc             C   s   i | ]}|j |“qS © )Úphrase)Ú.0Úvr   r   ú#/usr/lib64/python3.6/http/client.pyú
<dictcomp>k   s    r   i   i   éd   s   [^:\s][^:\r\n]*s   \n(?![ \t])|\r(?![ \t\n])z[ - ]z[ -]ZPATCHZPOSTZPUTÚdatac             C   sf   y
| j dƒS  tk
r` } z:t|j|j|j|jd|jƒ | |j|j… |f ƒd ‚W Y d d }~X nX d S )Nzlatin-1z`%s (%.20r) is not valid Latin-1. Use %s.encode('utf-8') if you want to send it encoded in UTF-8.)ÚencodeÚUnicodeEncodeErrorÚencodingÚobjectÚstartÚendÚtitle)r   ÚnameÚerrr   r   r   Ú_encode£   s    
r'   c               @   s   e Zd Zdd„ ZdS )ÚHTTPMessagec             C   sn   |j ƒ d }t|ƒ}g }d}xL| jƒ D ]@}|d |… j ƒ |krDd}n|d d… jƒ sXd}|r&|j|ƒ q&W |S )Nú:r   é   )ÚlowerÚlenÚkeysÚisspaceÚappend)Úselfr%   ÚnZlstZhitÚliner   r   r   Úgetallmatchingheaders¹   s    
z!HTTPMessage.getallmatchingheadersN)Ú__name__Ú
__module__Ú__qualname__r3   r   r   r   r   r(   ²   s   r(   c             C   s\   g }xR| j td ƒ}t|ƒtkr(tdƒ‚|j|ƒ t|ƒtkrJtdt ƒ‚|dkrP qW |S )Nr*   zheader linezgot more than %d headersó   
ó   
ó    )r7   r8   r9   )ÚreadlineÚ_MAXLINEr,   r   r/   Ú_MAXHEADERSr   )ÚfpÚheadersr2   r   r   r   Ú_read_headersÐ   s    
r?   c             C   s,   t | ƒ}dj|ƒjdƒ}tjj|d�j|ƒS )Nr9   z
iso-8859-1)Ú_class)r?   ÚjoinÚdecodeÚemailÚparserZParserZparsestr)r=   r@   r>   Zhstringr   r   r   Úparse_headersâ   s    
rE   c                   s  e Zd Zd@dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z‡ fdd„Z‡ fdd„Z	dd„ Z
dd„ ZdAdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ ZdCd(d)„ZdEd*d+„ZdG‡ fd,d-„	Zd.d/„ Zd0d1„ Zd2d3„ ZdHd4d5„Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Z ‡  Z!S )Ir   r   Nc             C   sR   |j dƒ| _|| _|| _d  | _| _t| _t| _t| _	t| _
t| _t| _t| _d S )NÚrb)Úmakefiler=   Ú
debuglevelÚ_methodr>   ÚmsgÚ_UNKNOWNÚversionÚstatusÚreasonÚchunkedÚ
chunk_leftÚlengthÚ
will_close)r0   ÚsockrH   ÚmethodÚurlr   r   r   Ú__init__ú   s    zHTTPResponse.__init__c             C   s  t | jjtd ƒdƒ}t|ƒtkr*tdƒ‚| jdkrBtdt|ƒƒ |sNt	dƒ‚y|j
d dƒ\}}}W nF tk
rª   y|j
d dƒ\}}d}W n tk
r¤   d}Y nX Y nX |jd	ƒsÆ| jƒ  t|ƒ‚y$t|ƒ}|d
k sà|dkrèt|ƒ‚W n tk
�r   t|ƒ‚Y nX |||fS )Nr*   z
iso-8859-1zstatus liner   zreply:z-Remote end closed connection without responseé   Ú zHTTP/r   iç  )Ústrr=   r:   r;   r,   r   rH   ÚprintÚreprr   ÚsplitÚ
ValueErrorÚ
startswithÚ_close_connr   Úint)r0   r2   rL   rM   rN   r   r   r   Ú_read_status  s2    

zHTTPResponse._read_statusc             C   sê  | j d k	rd S x<| jƒ \}}}|tkr(P t| jƒ}| jdkrFtd|ƒ ~qW | | _| _|j	ƒ | _
|dkrrd| _n|jdƒr„d| _nt|ƒ‚t| jƒ | _ | _| jdkrÐx&| j D ]}td|d	 | j j|ƒƒ q°W | j jd
ƒ}|rú|jƒ dkrúd| _d | _nd| _| jƒ | _d | _| j jdƒ}| j jd
ƒ}|�rx| j �rxyt|ƒ| _W n tk
�rb   d | _Y nX | jdk �r~d | _nd | _|tk�sº|tk�sºd|  k�o¦dk n  �sº| jdk�rÀd| _| j �ræ| j �ræ| jd k�ræd| _d S )Nr   zheaders:úHTTP/1.0úHTTP/0.9é
   zHTTP/1.é   zheader:r)   ztransfer-encodingrO   TFzcontent-lengthr   éÈ   ÚHEAD)rb   rc   )r>   ra   ZCONTINUEr?   r=   rH   rZ   ÚcoderM   ÚstriprN   rL   r^   r   rE   rJ   Úgetr+   rO   rP   Ú_check_closerR   rQ   r`   r]   Z
NO_CONTENTZNOT_MODIFIEDrI   )r0   rL   rM   rN   Zskipped_headersÚhdrZtr_encrQ   r   r   r   Úbegin9  s\    









zHTTPResponse.beginc             C   s‚   | j jdƒ}| jdkr:| j jdƒ}|r6d|jƒ kr6dS dS | j jdƒrJdS |r^d|jƒ kr^dS | j jdƒ}|r~d|jƒ kr~dS dS )NZ
connectionre   ÚcloseTFz
keep-alivezproxy-connection)r>   rj   rL   r+   )r0   ZconnZpconnr   r   r   rk   „  s    
zHTTPResponse._check_closec             C   s   | j }d | _ |jƒ  d S )N)r=   rn   )r0   r=   r   r   r   r_   ¢  s    zHTTPResponse._close_connc          
      s$   zt ƒ jƒ  W d | jr| jƒ  X d S )N)Úsuperrn   r=   r_   )r0   )Ú	__class__r   r   rn   §  s    zHTTPResponse.closec                s   t ƒ jƒ  | jr| jjƒ  d S )N)ro   Úflushr=   )r0   )rp   r   r   rq   ³  s    
zHTTPResponse.flushc             C   s   dS )NTr   )r0   r   r   r   Úreadable¸  s    zHTTPResponse.readablec             C   s
   | j d kS )N)r=   )r0   r   r   r   Úisclosed¾  s    zHTTPResponse.isclosedc             C   s¼   | j d krdS | jdkr$| jƒ  dS |d k	rRt|ƒ}| j|ƒ}t|ƒd |… jƒ S | jr`| jƒ S | j	d krv| j j
ƒ }n6y| j| j	ƒ}W n tk
r¤   | jƒ  ‚ Y nX d| _	| jƒ  |S d S )Nr9   rg   r   )r=   rI   r_   Ú	bytearrayÚreadintoÚ
memoryviewÚtobytesrO   Ú_readall_chunkedrQ   ÚreadÚ
_safe_readr
   )r0   ÚamtÚbr1   Úsr   r   r   ry   È  s*    



zHTTPResponse.readc             C   s¨   | j d krdS | jdkr$| jƒ  dS | jr4| j|ƒS | jd k	r^t|ƒ| jkr^t|ƒd| j… }| j j|ƒ}| r~|r~| jƒ  n&| jd k	r¤|  j|8  _| js¤| jƒ  |S )Nr   rg   )	r=   rI   r_   rO   Ú_readinto_chunkedrQ   r,   rv   ru   )r0   r|   r1   r   r   r   ru   è  s$    






zHTTPResponse.readintoc             C   sp   | j jtd ƒ}t|ƒtkr$tdƒ‚|jdƒ}|dkrB|d |… }y
t|dƒS  tk
rj   | jƒ  ‚ Y nX d S )Nr*   z
chunk sizeó   ;r   é   )	r=   r:   r;   r,   r   Úfindr`   r]   r_   )r0   r2   Úir   r   r   Ú_read_next_chunk_size
  s    

z"HTTPResponse._read_next_chunk_sizec             C   s>   x8| j jtd ƒ}t|ƒtkr&tdƒ‚|s,P |dkrP qW d S )Nr*   ztrailer lineó   
r8   r9   )r„   r8   r9   )r=   r:   r;   r,   r   )r0   r2   r   r   r   Ú_read_and_discard_trailer  s    z&HTTPResponse._read_and_discard_trailerc             C   sl   | j }|sh|d k	r| jdƒ y| jƒ }W n tk
rD   tdƒ‚Y nX |dkrb| jƒ  | jƒ  d }|| _ |S )NrW   r9   r   )rP   rz   rƒ   r]   r
   r…   r_   )r0   rP   r   r   r   Ú_get_chunk_left(  s    
zHTTPResponse._get_chunk_leftc             C   sd   g }y8x,| j ƒ }|d krP |j| j|ƒƒ d| _qW dj|ƒS  tk
r^   tdj|ƒƒ‚Y nX d S )Nr   r9   )r†   r/   rz   rP   rA   r
   )r0   ÚvaluerP   r   r   r   rx   @  s    

zHTTPResponse._readall_chunkedc             C   s°   d}t |ƒ}yvxp| jƒ }|d kr$|S t|ƒ|krL| j|ƒ}|| | _|| S |d |… }| j|ƒ}||d … }||7 }d| _qW W n( tk
rª   tt|d|… ƒƒ‚Y nX d S )Nr   )rv   r†   r,   Ú_safe_readintorP   r
   Úbytes)r0   r|   Útotal_bytesÚmvbrP   r1   Útemp_mvbr   r   r   r~   N  s$    


zHTTPResponse._readinto_chunkedc             C   sX   g }xH|dkrL| j jt|tƒƒ}|s4tdj|ƒ|ƒ‚|j|ƒ |t|ƒ8 }qW dj|ƒS )Nr   r9   )r=   ry   ÚminÚ	MAXAMOUNTr
   rA   r/   r,   )r0   r{   r}   Úchunkr   r   r   rz   f  s    

zHTTPResponse._safe_readc             C   s†   d}t |ƒ}xt|t|ƒk r€tt|ƒk r@|dt… }| jj|ƒ}n| jj|ƒ}|sjtt|d|… ƒt|ƒƒ‚||d … }||7 }qW |S )Nr   )rv   r,   rŽ   r=   ru   r
   r‰   )r0   r|   rŠ   r‹   rŒ   r1   r   r   r   rˆ   }  s    zHTTPResponse._safe_readintor*   c             C   sº   | j d ks| jdkrdS | jr(| j|ƒS | jd k	rJ|dk sD|| jkrJ| j}y| j j|ƒ}W n* tk
r„   |dkrt‚ | j jdƒ}Y nX | rš|rš| jƒ  n| jd k	r¶|  jt|ƒ8  _|S )Nrg   r9   r   r€   i   i @  )	r=   rI   rO   Ú_read1_chunkedrQ   Úread1r]   r_   r,   )r0   r1   Úresultr   r   r   r‘   �  s"    



zHTTPResponse.read1c             C   s4   | j d ks| jdkrdS | jr(| j|ƒS | j j|ƒS )Nrg   r9   )r=   rI   rO   Ú_peek_chunkedÚpeek)r0   r1   r   r   r   r”   ¥  s
    
zHTTPResponse.peekc                sŒ   | j d ks| jdkrdS | jr*tƒ j|ƒS | jd k	rL|dk sF|| jkrL| j}| j j|ƒ}| rl|rl| jƒ  n| jd k	rˆ|  jt|ƒ8  _|S )Nrg   r9   r   )r=   rI   rO   ro   r:   rQ   r_   r,   )r0   Úlimitr’   )rp   r   r   r:   ®  s    


zHTTPResponse.readlinec             C   sf   | j ƒ }|d ks|dkrdS d|  ko.|kn  s8|}| jj|ƒ}|  jt|ƒ8  _|sbtdƒ‚|S )Nr   r9   )r†   r=   r‘   rP   r,   r
   )r0   r1   rP   ry   r   r   r   r�   ½  s    zHTTPResponse._read1_chunkedc             C   sB   y| j ƒ }W n tk
r    dS X |d kr.dS | jj|ƒd |… S )Nr9   )r†   r
   r=   r”   )r0   r1   rP   r   r   r   r“   Ë  s    zHTTPResponse._peek_chunkedc             C   s
   | j jƒ S )N)r=   Úfileno)r0   r   r   r   r–   Ø  s    zHTTPResponse.filenoc             C   sH   | j d krtƒ ‚| j j|ƒp|}t|tƒs6t|dƒ r:|S dj|ƒS d S )NÚ__iter__z, )r>   r   Zget_allÚ
isinstancerY   ÚhasattrrA   )r0   r%   Údefaultr>   r   r   r   Ú	getheaderÛ  s    
zHTTPResponse.getheaderc             C   s   | j d krtƒ ‚t| j jƒ ƒS )N)r>   r   ÚlistÚitems)r0   r   r   r   Ú
getheadersï  s    
zHTTPResponse.getheadersc             C   s   | S )Nr   )r0   r   r   r   r—   ÷  s    zHTTPResponse.__iter__c             C   s   | j S )N)r>   )r0   r   r   r   Úinfoü  s    zHTTPResponse.infoc             C   s   | j S )N)rU   )r0   r   r   r   Úgeturl  s    
zHTTPResponse.geturlc             C   s   | j S )N)rM   )r0   r   r   r   Úgetcode  s    zHTTPResponse.getcode)r   NN)Néÿÿÿÿ)r¢   r¢   )r¢   r¢   )r¢   )N)"r4   r5   r6   rV   ra   rm   rk   r_   rn   rq   rr   rs   ry   ru   rƒ   r…   r†   rx   r~   rz   rˆ   r‘   r”   r:   r�   r“   r–   r›   rž   r—   rŸ   r    r¡   Ú__classcell__r   r   )rp   r   r   ñ   s<   	
!K

 "

	
c               @   sð   e Zd ZdZdZeZeZdZ	dZ
edd„ ƒZedd„ ƒZd	ejd	fd
d„Zd0dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd1dd „Zd2d!d"„Zd#d$„ Zd%d&„ Zd3dd'œd(d)„Zd	i fdd'œd*d+„Zd,d-„ Z d.d/„ Z!d	S )4r   re   zHTTP/1.1r*   r   c             C   s   t | tjƒS )N)r˜   ÚioÚ
TextIOBase)Ústreamr   r   r   Ú
_is_textIO0  s    zHTTPConnection._is_textIOc             C   sd   | d kr|j ƒ tkrdS d S t| dƒr*d S yt| ƒ}|jS  tk
rL   Y nX t| tƒr`t| ƒS d S )Nr   ry   )	ÚupperÚ_METHODS_EXPECTING_BODYr™   rv   ÚnbytesÚ	TypeErrorr˜   rY   r,   )ÚbodyrT   Zmvr   r   r   Ú_get_content_length6  s    

z"HTTPConnection._get_content_lengthNc             C   s\   || _ || _d | _g | _d | _t| _d | _d | _d | _	i | _
| j||ƒ\| _| _tj| _d S )N)ÚtimeoutÚsource_addressrS   Ú_bufferÚ_HTTPConnection__responseÚ_CS_IDLEÚ_HTTPConnection__staterI   Ú_tunnel_hostÚ_tunnel_portÚ_tunnel_headersÚ_get_hostportÚhostÚportÚsocketZcreate_connectionÚ_create_connection)r0   r¸   r¹   r®   r¯   r   r   r   rV   V  s    zHTTPConnection.__init__c             C   s<   | j rtdƒ‚| j||ƒ\| _| _|r.|| _n
| jjƒ  d S )Nz.Can't set up tunnel for established connection)rS   ÚRuntimeErrorr·   r´   rµ   r¶   Úclear)r0   r¸   r¹   r>   r   r   r   Ú
set_tunneli  s    zHTTPConnection.set_tunnelc             C   sÊ   |d krÂ|j dƒ}|j dƒ}||kr”yt||d d … ƒ}W nH tk
r„   ||d d … dkrh| j}ntd||d d …  ƒ‚Y nX |d |… }n| j}|rÂ|d dkrÂ|d dkrÂ|dd	… }||fS )
Nr)   ú]r*   rX   znonnumeric port: '%s'r   ú[r¢   r¢   )Úrfindr`   r]   Údefault_portr   )r0   r¸   r¹   r‚   Újr   r   r   r·   �  s    

zHTTPConnection._get_hostportc             C   s
   || _ d S )N)rH   )r0   Úlevelr   r   r   Úset_debuglevel•  s    zHTTPConnection.set_debuglevelc             C   s  d| j | jf }|jdƒ}| j|ƒ x6| jjƒ D ](\}}d||f }|jdƒ}| j|ƒ q0W | jdƒ | j| j| jd�}|j	ƒ \}}	}
|	t
jjkr®| jƒ  td|	|
jƒ f ƒ‚xP|jjtd ƒ}t|ƒtkrÔtd	ƒ‚|sÚP |dkräP | jdkr°td|jƒ ƒ q°W d S )NzCONNECT %s:%d HTTP/1.0
Úasciiz%s: %s
zlatin-1ó   
)rT   zTunnel connection failed: %d %sr*   zheader liner8   r9   r   zheader:)rÇ   r8   r9   )r´   rµ   r   Úsendr¶   r�   Úresponse_classrS   rI   ra   ÚhttpÚ
HTTPStatusZOKrn   ÚOSErrorri   r=   r:   r;   r,   r   rH   rZ   rB   )r0   Zconnect_strZconnect_bytesÚheaderr‡   Z
header_strZheader_bytesÚresponserL   rh   Úmessager2   r   r   r   Ú_tunnel˜  s2    





zHTTPConnection._tunnelc             C   sB   | j | j| jf| j| jƒ| _| jjtjtj	dƒ | j
r>| jƒ  d S )Nr*   )r»   r¸   r¹   r®   r¯   rS   Z
setsockoptrº   ZIPPROTO_TCPZTCP_NODELAYr´   rÐ   )r0   r   r   r   Úconnect·  s
    zHTTPConnection.connectc             C   sB   t | _z| j}|r d | _|jƒ  W d | j}|r<d | _|jƒ  X d S )N)r²   r³   rS   rn   r±   )r0   rS   rÎ   r   r   r   rn   À  s    zHTTPConnection.closec             C   s  | j d kr | jr| jƒ  ntƒ ‚| jdkr8tdt|ƒƒ d}t|dƒr¬| jdkrXtdƒ | j|ƒ}|rx| jdkrxtdƒ x.|j	|ƒ}|sŠP |r˜|j
dƒ}| j j|ƒ qzW d S y| j j|ƒ W nN tk
�r
   t|tjƒröx*|D ]}| j j|ƒ qàW ntdt|ƒ ƒ‚Y nX d S )	Nr   zsend:i    ry   zsendIng a read()ablezencoding file using iso-8859-1z
iso-8859-1z9data should be a bytes-like object or an iterable, got %r)rS   Ú	auto_openrÑ   r   rH   rZ   r[   r™   r§   ry   r   Zsendallr«   r˜   ÚcollectionsÚIterableÚtype)r0   r   Ú	blocksizer   Ú	datablockÚdr   r   r   rÈ   Î  s:    








zHTTPConnection.sendc             C   s   | j j|ƒ d S )N)r°   r/   )r0   r}   r   r   r   Ú_outputõ  s    zHTTPConnection._outputc             c   sd   d}| j dkrtdƒ | j|ƒ}|r6| j dkr6tdƒ x(|j|ƒ}|sHP |rV|jdƒ}|V  q8W d S )Ni    r   zsendIng a read()ablezencoding file using iso-8859-1z
iso-8859-1)rH   rZ   r§   ry   r   )r0   rr   rÖ   r   r×   r   r   r   Ú_read_readableü  s    



zHTTPConnection._read_readableFc             C   s$  | j jdƒ dj| j ƒ}| j d d …= | j|ƒ |d k	�r t|dƒrN| j|ƒ}nZyt|ƒ W nF tk
r    yt|ƒ}W n$ tk
rš   tdt	|ƒ ƒ‚Y nX Y nX |f}xZ|D ]R}|sÊ| j
dkr®tdƒ q®|rö| jdkröt|ƒd›d	�jd
ƒ| d }| j|ƒ q®W |�r | jdk�r | jdƒ d S )Nr9   s   
ry   zAmessage_body should be a bytes-like object or an iterable, got %rr   zZero length chunk ignoredre   ÚXz
rÆ   s   0

)r9   r9   )r°   ÚextendrA   rÈ   r™   rÚ   rv   r«   ÚiterrÕ   rH   rZ   Ú	_http_vsnr,   r   )r0   Úmessage_bodyÚencode_chunkedrJ   Zchunksr�   r   r   r   Ú_send_output  s4    




zHTTPConnection._send_outputc             C   sÄ  | j r| j jƒ rd | _ | jtkr(t| _n
t| jƒ‚| j|ƒ || _|sJd}tj	|ƒ}|rrt
d|›d|jƒ ›d�ƒ‚d||| jf }| j|jdƒƒ | jdk�rÀ|�s¬d}|jd	ƒrÄt|ƒ\}}}}}|�ry|jdƒ}	W n tk
rö   |jd
ƒ}	Y nX | jd|	ƒ n¦| j�r| j}
| j}n| j}
| j}y|
jdƒ}W n  tk
�rV   |
jd
ƒ}Y nX |
jdƒdk�rtd| d }|| jk�rŽ| jd|ƒ n|jdƒ}| jdd||f ƒ |�sÀ| jddƒ n d S )Nú/z&URL can't contain control characters. z (found at least ú)z%s %s %srÆ   re   rX   rÊ   ZidnaZHostr)   r   ó   [ó   ]z%s:%szAccept-EncodingZidentity)r±   rs   r³   r²   Ú_CS_REQ_STARTEDr   Ú_validate_methodrI   Ú!_contains_disallowed_url_pchar_reÚsearchr   ÚgroupÚ_http_vsn_strrÙ   r   rÞ   r^   r   r   Ú	putheaderr´   rµ   r¸   r¹   r�   rÂ   rB   )r0   rT   rU   Ú	skip_hostÚskip_accept_encodingÚmatchÚrequestZnetlocZnilZ
netloc_encr¸   r¹   Zhost_encr   r   r   Ú
putrequestA  sV    






zHTTPConnection.putrequestc             C   s,   t j|ƒ}|r(td|›d|jƒ ›d�ƒ‚d S )Nz)method can't contain control characters. z (found at least rã   )Ú$_contains_disallowed_method_pchar_reré   r]   rê   )r0   rT   rï   r   r   r   rç   Ä  s    
zHTTPConnection._validate_methodc             G   sÐ   | j tkrtƒ ‚t|dƒr$|jdƒ}t|ƒs:td|f ƒ‚t|ƒ}xht|ƒD ]\\}}t|dƒrn|jdƒ||< nt	|t
ƒrŠt|ƒjdƒ||< t|| ƒrLtd|| f ƒ‚qLW dj|ƒ}|d | }| j|ƒ d S )Nr   rÆ   zInvalid header name %rzlatin-1zInvalid header value %rs   
	s   : )r³   ræ   r   r™   r   Ú_is_legal_header_namer]   rœ   Ú	enumerater˜   r`   rY   Ú_is_illegal_header_valuerA   rÙ   )r0   rÍ   Úvaluesr‚   Z	one_valuer‡   r   r   r   rì   Í  s"    





zHTTPConnection.putheader)rà   c            C   s*   | j tkrt| _ ntƒ ‚| j||d� d S )N)rà   )r³   ræ   Ú_CS_REQ_SENTr   rá   )r0   rß   rà   r   r   r   Ú
endheadersé  s    
zHTTPConnection.endheadersc            C   s   | j |||||ƒ d S )N)Ú_send_request)r0   rT   rU   r¬   r>   rà   r   r   r   rð   ö  s    zHTTPConnection.requestc             C   sü   t dd„ |D ƒƒ}i }d|kr&d|d< d|kr6d|d< | j||f|Ž d|kr°d	|kr´d
}| j||ƒ}|d krž|d k	r®| jdkrŒtd| ƒ d}| jddƒ q´| jdt|ƒƒ nd
}x |jƒ D ]\}	}
| j|	|
ƒ q¾W t|tƒrêt	|dƒ}| j
||d� d S )Nc             s   s   | ]}|j ƒ V  qd S )N)r+   )r   Úkr   r   r   ú	<genexpr>ý  s    z/HTTPConnection._send_request.<locals>.<genexpr>r¸   r*   rí   zaccept-encodingrî   zcontent-lengthztransfer-encodingFr   zUnable to determine size of %rTzTransfer-EncodingrO   zContent-Lengthr¬   )rà   )Ú	frozensetrñ   r­   rH   rZ   rì   rY   r�   r˜   r'   rø   )r0   rT   rU   r¬   r>   rà   Zheader_namesZskipsZcontent_lengthrl   r‡   r   r   r   rù   û  s0    	


zHTTPConnection._send_requestc             C   sÌ   | j r| j jƒ rd | _ | jtks&| j r0t| jƒ‚| jdkrR| j| j| j| jd�}n| j| j| jd�}yLy|j	ƒ  W n t
k
r�   | jƒ  ‚ Y nX t| _|jr¨| jƒ  n|| _ |S    |jƒ  ‚ Y nX d S )Nr   )rT   )r±   rs   r³   r÷   r   rH   rÉ   rS   rI   rm   ÚConnectionErrorrn   r²   rR   )r0   rÎ   r   r   r   Úgetresponse)  s,    


zHTTPConnection.getresponse)NN)NF)FF)N)"r4   r5   r6   rÞ   rë   r   rÉ   Ú	HTTP_PORTrÂ   rÒ   rH   Ústaticmethodr§   r­   rº   Ú_GLOBAL_DEFAULT_TIMEOUTrV   r¾   r·   rÅ   rÐ   rÑ   rn   rÈ   rÙ   rÚ   rá   rñ   rç   rì   rø   rð   rù   rþ   r   r   r   r   r   &  s<    
	'
6 
 	.c                   sB   e Zd ZeZdddejdfdddœ‡ fdd„Z‡ fdd„Z‡  Z	S )ÚHTTPSConnectionN)ÚcontextÚcheck_hostnamec               sÐ   t t| ƒj||||ƒ |d k	s.|d k	s.|d k	rDdd l}	|	jdtdƒ || _|| _|d krptj	ƒ }|j
d k	rpd|_
|jtjk}
|d krŠ|j}|rœ|
 rœtdƒ‚|s¤|rÀ|j||ƒ |j
d k	rÀd|_
|| _|| _d S )Nr   zTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.rW   TzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)ro   r  rV   ÚwarningsÚwarnÚDeprecationWarningÚkey_fileÚ	cert_fileÚsslZ_create_default_https_contextZpost_handshake_authZverify_modeZ	CERT_NONEr  r]   Zload_cert_chainÚ_contextÚ_check_hostname)r0   r¸   r¹   r  r	  r®   r¯   r  r  r  Zwill_verify)rp   r   r   rV   t  s0    


zHTTPSConnection.__init__c                sŒ   t ƒ jƒ  | jr| j}n| j}| jj| j|d�| _| jj rˆ| jrˆyt	j
| jjƒ |ƒ W n. tk
r†   | jjtjƒ | jjƒ  ‚ Y nX d S )N)Úserver_hostname)ro   rÑ   r´   r¸   r  Zwrap_socketrS   r  r  r
  Zmatch_hostnameZgetpeercertÚ	ExceptionZshutdownrº   Z	SHUT_RDWRrn   )r0   r  )rp   r   r   rÑ   –  s    



zHTTPSConnection.connect)
r4   r5   r6   Ú
HTTPS_PORTrÂ   rº   r  rV   rÑ   r£   r   r   )rp   r   r  m  s   r  c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   ¬  s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   ±  s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   ´  s   c               @   s   e Zd Zdd„ ZdS )r   c             C   s   |f| _ || _d S )N)ÚargsrL   )r0   rL   r   r   r   rV   ¸  s    zUnknownProtocol.__init__N)r4   r5   r6   rV   r   r   r   r   r   ·  s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   ¼  s   c               @   s   e Zd ZdS )r	   N)r4   r5   r6   r   r   r   r   r	   ¿  s   c               @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	r
   Nc             C   s   |f| _ || _|| _d S )N)r  ÚpartialÚexpected)r0   r  r  r   r   r   rV   Ã  s    zIncompleteRead.__init__c             C   s2   | j d k	rd| j  }nd}d| jjt| jƒ|f S )Nz, %i more expectedrX   z%s(%i bytes read%s))r  rp   r4   r,   r  )r0   Úer   r   r   Ú__repr__Ç  s
    
zIncompleteRead.__repr__c             C   s   t | ƒS )N)r[   )r0   r   r   r   Ú__str__Î  s    zIncompleteRead.__str__)N)r4   r5   r6   rV   r  r  r   r   r   r   r
   Â  s   
c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   Ñ  s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   Ô  s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   ×  s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r   Ú  s   c               @   s   e Zd Zdd„ ZdS )r   c             C   s   |st |ƒ}|f| _|| _d S )N)r[   r  r2   )r0   r2   r   r   r   rV   Þ  s    zBadStatusLine.__init__N)r4   r5   r6   rV   r   r   r   r   r   Ý  s   c               @   s   e Zd Zdd„ ZdS )r   c             C   s   t j| dt|f ƒ d S )Nz&got more than %d bytes when reading %s)r   rV   r;   )r0   Z	line_typer   r   r   rV   å  s    zLineTooLong.__init__N)r4   r5   r6   rV   r   r   r   r   r   ä  s   c               @   s   e Zd Zdd„ ZdS )r   c             O   s"   t j| dƒ tj| f|ž|Ž d S )NrX   )r   rV   ÚConnectionResetError)r0   ÚposÚkwr   r   r   rV   ê  s    zRemoteDisconnected.__init__N)r4   r5   r6   rV   r   r   r   r   r   é  s   )r   )AZemail.parserrC   Zemail.messagerÊ   r¤   ÚosÚrerº   rÓ   Zurllib.parser   Ú__all__rÿ   r  rK   r²   ræ   r÷   ÚglobalsÚupdaterË   Ú__members__rö   r   rŽ   r;   r<   ÚcompileÚ	fullmatchró   ré   rõ   rè   rò   r©   r'   rÏ   ZMessager(   r?   rE   ÚBufferedIOBaser   r   r
  ÚImportErrorr  r/   r  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r  r   r   r   r   r   r   Ú<module>G   s„   



    9    F=
