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 *