
    hg                         U d Z ddlZddlZddlmZmZ ddlmZmZ ddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ  e            Zee
j                 ed	<   d
edefdZd Zd Zd Zd Zdee         defdZdS )zsHandles generation of HAR archives.

This code has been taken from the har_dump.py addon in the mitmproxy project.
    N)datetimetimezone)ListSet)connections)HTTPFlow)cookies)strutilsSERVERS_SEENflowreturnc                    d}d}| j         rk| j         t          vr]| j         j        | j         j        z
  }| j         j        | j         j        | j         j        z
  }t                              | j                    | j        j        | j        j        z
  | j        j        | j        j        z
  | j        j        | j        j        z
  ||d}d |	                                D             }t          d |                                D                       }t          j        | j        j        t          j                                                  }| j        j        rt%          | j        j                  nd}| j        j        rt%          | j        j                  nd}||z
  }	||| j        j        | j        j        | j        j        t/          | j        j        j                  t5          | j        j                  t5          | j        j        pi           t%          t;          | j        j                            t%          | j        j                  d| j        j        | j        j        | j        j        tA          | j        j        j                  t5          | j        j                  ||	| j        j        !                    dd	          d
| j        j        !                    dd	          t%          t;          | j        j                            |d	i |d}
tE          j#        | j        j                  rQtI          j%        | j        j                  &                                |
d         d         d<   d|
d         d         d<   n*| j        '                    d          |
d         d         d<   | j        j        dv rpd | j        j(        	                    d          D             }| j        j        !                    dd	          | j        '                    d          |d|
d         d<   | j         )                                r"t;          | j         j*        d                   |
d<   |
S )zCreate a HAR entry from the supplied flow.

    Args:
        flow: The current flow.
    Returns: The HAR entry as a dictionary.
    N)sendreceivewaitconnectsslc                 J    i | ] \  }}||d k    rt          d|z            nd !S )r   i  )int.0kvs      I/var/www/fb-scrape/myenv/lib/python3.11/site-packages/seleniumwire/har.py
<dictcomp>z$create_har_entry.<locals>.<dictcomp>7   s4    SSStq!q177#dQh---SSS    c              3   &   K   | ]}|d k    |V  dS )r   N )r   r   s     r   	<genexpr>z#create_har_entry.<locals>.<genexpr>;   s&      ::!1r66A6666::r   r   )methodurlhttpVersionr	   headersqueryStringheadersSizebodySizezContent-Type )sizecompressionmimeTypeLocation)	status
statusTextr#   r	   r$   contentredirectURLr&   r'   )startedDateTimetimerequestresponsecachetimingsr4   r/   textbase64encodingF)strict)POSTPUTPATCHc                     g | ]
\  }}||d S namevaluer   )r   abs      r   
<listcomp>z$create_har_entry.<locals>.<listcomp>l   s$    eeeda1q))eeer   T)multi)r+   r7   paramsr3   postDataserverIPAddress)+server_connr   timestamp_tcp_setuptimestamp_starttimestamp_tls_setupaddr3   timestamp_endr4   itemssumvaluesr   fromtimestampr   utc	isoformatraw_contentlenr/   r!   r"   http_version_format_request_cookiesr	   fields_name_valuer$   querystrstatus_codereason_format_response_cookiesgetr
   is_mostly_binr8   	b64encodedecodeget_texturlencoded_form	connected
ip_address)r   ssl_timeconnect_timetimings_rawr6   	full_timestarted_date_timeresponse_body_sizeresponse_body_decoded_sizeresponse_body_compressionentryrG   s               r   create_har_entryrr      s    HL +D,L@@';d>N>^^/;';d>N>bbH)*** *T\-II=.1NN-0JJ K TS{?P?P?R?RSSSG ::w~~//:::::I .t|/KX\ZZddff <@=;T[T]6777Z[?C}?T![T]%:!;!;!;Z[ :=O O -l)<#<4.t|/C/JKK"4<#788&t|'9'?R@@s4<#78899DL011	
 	
 m/-.=5/0E0LMM"4=#899*8 M155nbII 
  =044ZDDs4=#899::*
 
 ; EB dm344 T/5/?@U/V/V/]/]/_/_j)$V,3;j)$Z00/3}/E/EU/E/S/Sj)$V,|666eedl6R6X6X_c6X6d6deee,00DDL)))77(
 (
i$ !!## G#&t'7'B1'E#F#F Lr   c                 >   g }| D ]\  }}}||d}dD ]}||v r||         ||<   dD ]}t          ||v           ||<   t          j        |          }|4t          j        |t
          j                                                  |d<   |                    |           |S )Nr@   )pathdomaincomment)httpOnlysecureexpires)	boolr	   get_expiration_tsr   rS   r   rT   rU   append)cookie_listrvrA   rB   attrs
cookie_harkey	expire_tss           r   _format_cookiesr   y   s    	B)  eU
 

 1 	- 	-Ce||"'*
3 * 	1 	1C"3%<00JsOO -e44	 $,$:9hl$S$S$]$]$_$_Jy!
		*Ir   c                 D    t          t          j        |                     S )N)r   r	   group_cookiesrZ   s    r   rY   rY      s    7088999r   c                 4    t          d | D                       S )Nc              3   \   K   | ]'}|d          |d         d          |d         d         fV  (dS )r      Nr   )r   cs     r   r    z+_format_response_cookies.<locals>.<genexpr>   s=      DDAaD!A$q'1Q473DDDDDDr   )r   r   s    r   r`   r`      s    DDVDDDDDDr   c                 >    d |                                  D             S )z3
    Convert (key, value) pairs to HAR format.
    c                     g | ]
\  }}||d S r?   r   r   s      r   rE   z_name_value.<locals>.<listcomp>   s$    <<<1Q##<<<r   )rP   )objs    r   r[   r[      s      =<		<<<<r   entriesc                 t    dddt           j        dt           j         d| di}t          j        |d          S )	zGenerate a HAR as a JSON formatted string.

    Args:
        entries: A list of HAR entries.
    Returns: A JSON formatted string.
    logz1.2zSelenium Wire HAR dumpzSelenium Wire version )rA   versionrv   )r   creatorr      )indent)seleniumwire__version__jsondumps)r   hars     r   generate_harr      sX     	0'3NL4LNN 
 
 

C :c!$$$$r   )__doc__r8   r   r   r   typingr   r   r   !seleniumwire.thirdparty.mitmproxyr   &seleniumwire.thirdparty.mitmproxy.httpr   *seleniumwire.thirdparty.mitmproxy.net.httpr	   'seleniumwire.thirdparty.mitmproxy.utilsr
   setr   ServerConnection__annotations__dictrr   r   rY   r`   r[   r]   r   r   r   r   <module>r      sd       ' ' ' ' ' ' ' '             9 9 9 9 9 9 ; ; ; ; ; ; > > > > > > < < < < < < 36#%%c+./ 7 7 7a8 a a a a aH  8: : :E E E= = =%$t* % % % % % % %r   