Siga los redireccionamientos en cURL

    La utilidad cURL es un programa de l铆nea de comandos que a menudo se incluye con distribuciones Unix / Linux y sistemas operativos Mac OSX. Le permite enviar casi cualquier tipo de solicitud HTTP a trav茅s de la l铆nea de comando, lo cual es excelente para muchas cosas, desde la publicaci贸n de datos hasta una API REST y la descarga de archivos.

    Es muy com煤n que los servidores HTTP devuelvan una redirecci贸n 301 o 302 para una URL determinada. Un ejemplo com煤n de esto es redirigir su navegador de una URL HTTP a HTTPS, como http://Pharos.sh.com a https://Pharos.sh.com. Usando cURL, podemos ver c贸mo se ve realmente esta redirecci贸n:

    $ curl -i http://Pharos.sh.com
    HTTP/1.1 301 Moved Permanently
    Date: Thu, 18 Apr 2019 02:11:32 GMT
    Transfer-Encoding: chunked
    Connection: keep-alive
    Cache-Control: max-age=3600
    Expires: Thu, 18 Apr 2019 03:11:32 GMT
    Location: https://Pharos.sh.com/
    

    Tenga en cuenta que us茅 el -i flag para que imprima los encabezados de respuesta de la solicitud.

    Cuando se usa en scripts Bash o se ejecuta cURL a trav茅s de la l铆nea de comando manualmente, no querr谩 tener que manejar estos redireccionamientos manualmente, de lo contrario podr铆a agregar mucha l贸gica innecesaria a su script. Debido a esto, cURL ofrece una marca de l铆nea de comando que le dice que siga autom谩ticamente la redirecci贸n y devuelva el punto final resuelto y sus datos:

    $ curl -L [url]
    

    La ejecuci贸n de este comando manejar谩 autom谩ticamente cualquier redireccionamiento 3XX y recuperar谩 los datos devueltos por la URL resultante.

    Aqu铆 est谩 la misma solicitud de arriba, pero con el -L (que es un alias para --location) marca para seguir las redirecciones:

    $ curl -iL http://Pharos.sh.com
    HTTP/1.1 301 Moved Permanently
    Date: Thu, 18 Apr 2019 02:17:42 GMT
    Transfer-Encoding: chunked
    Connection: keep-alive
    Cache-Control: max-age=3600
    Expires: Thu, 18 Apr 2019 03:17:42 GMT
    Location: https://Pharos.sh.com/
    
    HTTP/1.1 200 OK
    Date: Thu, 18 Apr 2019 02:17:42 GMT
    Content-Type: text/html; charset=utf-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    domain=.Pharos.sh.com; HttpOnly; Secure
    Cache-Control: public, max-age=3600
    Vary: Accept-Encoding
    P3P: CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"
    Expires: Thu, 18 Apr 2019 03:17:42 GMT
    
    <!DOCTYPE html>
    <html lang="en">
    ...
    </html>
    

    Tenga en cuenta que dado que mantuvimos el -i flag en su lugar nos mostr贸 los encabezados para cada una de las solicitudes realizadas, adem谩s del HTML final devuelto por el servidor, que fue abreviado por brevedad.

    Limitaci贸n de redireccionamientos

    Pero, 驴qu茅 pasa si la URL que solicita se redirecciona a otra URL que devuelve una redirecci贸n? No es raro encontrarse con m煤ltiples redireccionamientos secuenciales antes de llegar al destino final.

    Por ejemplo, digamos que mi servidor tiene las siguientes reglas:

    • Redirigir de HTTP a HTTPS
    • Redirigir de example.com a www.example.com
    • Redirigir desde / acerca de / acerca de nosotros
    • Redirigir de ninguna barra al final a una barra al final

    Dadas estas reglas, si enviamos una solicitud a http://example.com/about llegar铆amos a 4 redireccionamientos para finalmente terminar en https://www.example.com/about-us/. Si bien no se trata de muchas redirecciones, puedes imaginar que es posible encontrar muchas m谩s.

    驴Y si dos URL se redireccionan continuamente entre s铆? Entonces estar铆as atrapado en un ciclo infinito de redireccionamiento. cURL tiene una forma de manejar esto imponiendo un n煤mero m谩ximo de redireccionamientos que seguir谩, que por defecto es 50. Usando el --max-redirs opci贸n, puede establecer este n煤mero en el que mejor se adapte a su caso de uso.

    Entonces, usando nuestro ejemplo ficticio de arriba, si establecemos un n煤mero m谩ximo de redirecciones en 1, ver铆amos un error como este:

    $ curl -iL --max-redirs 1 http://example.com
    HTTP/1.1 301 Moved Permanently
    Date: Thu, 18 Apr 2019 02:39:59 GMT
    Transfer-Encoding: chunked
    Connection: keep-alive
    Location: https://example.com/about
    
    HTTP/1.1 301 Moved Permanently
    Date: Thu, 18 Apr 2019 02:39:59 GMT
    Transfer-Encoding: chunked
    Connection: keep-alive
    Location: https://www.example.com/about
    P3P: CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"
    
    curl: (47) Maximum (1) redirects followed
    

    Por otro lado, si no desea ning煤n l铆mite, config煤relo en -1.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *