
    lci                     N    d Z ddlZddlZddlmZ ddlZddlmZ d Zd Z	d	dZ
dS )
u   
Resolución de URLs de descarga: redirecciones HTTP y meta-refresh.

Muchas páginas usan redirecciones o <meta http-equiv="refresh"> antes de
servir el binario. Este módulo sigue esas cadenas hasta la URL final.
    N)urljoin   )configc                     ddg}|D ]I}t          j        || t           j                  }|r%t          ||                    d                    c S JdS )z
    Busca <meta http-equiv="refresh" content="...; URL=..."> en el HTML.

    Returns:
        URL absoluta de destino o None.
    zX<meta\s+http-equiv=["\']?refresh["\']?\s+content=["\']?\d+;\s*URL=[\'"]?([^"\'>]+)[\'"]?zR<meta\s+http-equiv=["\']?refresh["\']?\s+content=["\']?\d+;URL=[\'"]([^"\']+)[\'"]r   N)research
IGNORECASEr   group)html_contentbase_urlpatronespatronmatchs        ?/srv/repositorios/osluz/webnueva/scripts/descarga/http_utils.py_buscar_meta_refreshr      sj     	d]H  5 5	&,>> 	58U[[^^44444	54    c                    t          j        | |ddd          }|j                            d          pd                                }|j        }d|vr|                                 |||j        fS |                                 t          j        ||dd          }|j        r|j        dd	         nd}t          ||j                  }|r(t          j	        d
|            t          ||          S t          j        d|t          j                  }|r|                    d          d|j        fS |j        ||j        fS )u}   
    Resuelve la URL final en páginas de descarga de SourceForge (incl. página
    "Tu descarga comenzará en breve").
       T)headerstimeoutallow_redirectsstreamContent-Type 	text/htmlr   r   r   Ni'  zMeta-refresh detectado en SF: )r   z2https?://[^"\']*downloads\.sourceforge\.net[^"\']+r   zapplication/octet-stream)requestsgetr   lowerurlclosetextr   logginginforesolver_url_descargar   r   r	   r
   )	r    r   rcontent_type	final_urlr2htmlurl_redirectmms	            r   _resolver_url_sourceforger-   $   sB   
 	S'2tTXYYYAIMM.117R>>@@LI,&&				,	11GGIII	i"d	S	S	SB g-276E6??2D'bf55L DDlDDEEE$\7CCCC	H$PRP]	^	^B	 Cxx{{6
BB6<++r   c                    |st           j                                        }|                    dd           d|d<   	 d| v sd| v rt	          | |          S t          j        | |dd          }|j                            d	          pd
	                                }d|vr|j
        ||j        fS t          j        | |dd          }|j        dd                             dd          }t          ||j
                  }|r't          j        d|            t!          ||          S |j
        d|j        fS # t"          $ r)}t          j        d|  d|            | ddfcY d}~S d}~ww xY w)z
    Resuelve la URL final de descarga siguiendo redirecciones y meta-refresh.

    Args:
        url: URL inicial.
        headers: Cabeceras HTTP (opcional).

    Returns:
        (url_final, content_type, response_headers)
    zAccept-EncodingNzgzip, deflatezsourceforge.netzsf.netr   Tr   r   r   r   i  zutf-8ignore)errorszMeta-refresh detectado: z'Error resolviendo URL de descarga para z: )r   DEFAULT_HEADERScopypopr-   r   headr   r   r   r    contentdecoder   r#   r$   r%   	Exceptionwarning)r    r   r&   r'   r5   r+   es          r   r%   r%   <   s     0(--//KK!4(((!0G##x3,S':::M#wDQQQ	n55;BBDDl**5,	11Lgr4PPP)ETE"))'()CC+GQU;; 	@LBLBBCCC(w???uk19,,   L#LLLLMMMD$s1   D7 AD7 .A9D7 (D7 7
E*E%E*%E*)N)__doc__r#   r   urllib.parser   r   r   r   r   r-   r%    r   r   <module>r=      s      				                     $, , ,0     r   