Follow Redirects en cURL

La utilidad cURL es un programa de línea de comandos que a menudo se incluye con las distribuciones Unix / Linux y los sistemas operativos Mac OSX. Le permite enviar casi cualquier tipo de solicitud HTTP a través de la línea de comandos, lo cual es ideal para muchas cosas, desde la publicación de datos a una API REST hasta la descarga de archivos.
Es extremadamente común que los servidores HTTP devuelvan un redireccionamiento 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://stackabuse.comhttps://stackabuse.comUsando cURL, podemos ver cómo se ve este redireccionamiento:
$ curl -i http://stackabuse.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://stackabuse.com/  
Tenga en cuenta que utilicé la -imarca para imprimir los encabezados de respuesta de la solicitud.
Cuando se usa en Bash scripts o ejecuta cURL a través de la línea de comando manualmente, no querría tener que manejar estos redireccionamientos manualmente, de lo contrario podría agregar mucha lógica innecesaria a su script. Debido a esto, cURL ofrece un indicador de línea de comando que le indica 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 redirección 3XX y recuperará cualquier dato que sea devuelto por la URL resultante.
Esta es la misma solicitud de arriba, pero con la -Lmarca (que es un alias para --location) para seguir las redirecciones:
$ curl -iL http://stackabuse.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://stackabuse.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=.stackabuse.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 la -ibandera en su lugar, nos mostró los encabezados de cada una de las solicitudes realizadas, además del HTML final devuelto por el servidor, que se acortó por brevedad.

Limitar redirecciones

Pero, ¿qué sucede si la URL que solicita redirige a otra URL que devuelve una redirección? No es raro que se ejecute en varias redirecciones secuenciales antes de llegar al destino final.
Por ejemplo, digamos que mi servidor tiene las siguientes reglas:
  • Redireccionamiento de HTTP a HTTPS
  • Redirigir de example.com a www.example.com
  • Redirigir desde / alrededor de / sobre-nosotros
  • Redirigir desde una barra diagonal descendente a una barra diagonal descendente
Dadas estas reglas, si enviamos una solicitud a http://example.com/about4 redirecciones para terminar finalmente en https://www.example.com/about-us/Si bien esto no es en realidad una gran cantidad de redirecciones, puedes imaginar que es posible encontrar muchas más.
¿Y qué pasa si dos URL se redirigen continuamente entre sí? Entonces estarías atrapado en un bucle infinito de redirección. cURL tiene una manera de manejar esto mediante la aplicación de un número máximo de redirecciones que seguirá, lo que por defecto es 50. Con la --max-redirsopción puede configurar este número para lo 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 a 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, simplemente configúrelo en -1.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.