La guía curl para solicitudes HTTP

curl es una herramienta increíble que te permite crear solicitudes de red desde la línea de comandos

curl es una herramienta de línea de comandos que permite transferir datos a través de la red.

Admite muchos protocolos listos para usar, incluidos HTTP, HTTPS, FTP, FTPS, SFTP, IMAP, SMTP, POP3 y muchos más.

Cuando se trata de depurar solicitudes de red, curl es una de las mejores herramientas que puede encontrar.

Es una de esas herramientas a las que, una vez que sabes cómo usar, siempre vuelves. El mejor amigo de un programador.

Es universal, se ejecuta en Linux, Mac, Windows. Referirse aguía de instalación oficialpara instalarlo en su sistema.

Dato curioso: el autor y mantenedor de curl, sueco, fue premiado por el rey de Suecia por las contribuciones que su trabajo (curl y libcurl) hizo al mundo de la informática.

Analicemos algunos de los comandos y operaciones que probablemente desee realizar cuando trabaje con solicitudes HTTP.

Esos ejemplos implican trabajar con HTTP, el protocolo más popular.

Realizar una solicitud HTTP GET

Cuando realiza una solicitud, curl devolverá el cuerpo de la respuesta:

curl https://flaviocopes.com/

Obtener los encabezados de respuesta HTTP

De forma predeterminada, los encabezados de respuesta están ocultos en la salida de curl. Para mostrarlos, use eliopción:

curl -i https://flaviocopes.com/

Obtenga solo los encabezados de respuesta HTTP

Utilizando laIopción, puedes obtenersolamentelos encabezados, y no el cuerpo de la respuesta:

curl -I https://flaviocopes.com/

Realizar una solicitud HTTP POST

losXLa opción le permite cambiar el método HTTP utilizado. Por defecto, se usa GET, y es lo mismo que escribir

curl -X GET https://flaviocopes.com/

Usando-X POSTrealizará una solicitud POST.

Puede realizar una solicitud POST pasando datos en URL codificados:

curl -d "option=value&something=anothervalue" -X POST https://flaviocopes.com/

En este caso, elapplication/x-www-form-urlencodedSe envía el tipo de contenido.

Realice una solicitud HTTP POST enviando JSON

En lugar de publicar datos codificados en URL, como en el ejemplo anterior, es posible que desee enviar JSON.

En este caso, debe establecer explícitamente el encabezado Content-Type, utilizando elHopción:

curl -d '{"option": "value", "something": "anothervalue"}' -H "Content-Type: application/json" -X POST https://flaviocopes.com/

También puede enviar un archivo JSON desde su disco:

curl -d "@my-file.json" -X POST https://flaviocopes.com/

Realizar una solicitud HTTP PUT

El concepto es el mismo que para las solicitudes POST, simplemente cambie el método HTTP usando-X PUT

Seguir una redirección

Una respuesta de redireccionamiento como 301, que especifica elLocationencabezado de respuesta, se puede seguir automáticamente especificando elLopción:

curl http://flaviocopes.com/

no seguirá automáticamente a la versión HTTPS que configuré para redirigir, pero esto:

curl -L http://flaviocopes.com/

Almacene la respuesta en un archivo

Utilizando laoopción puede decirle a curl que guarde la respuesta en un archivo:

curl -o file.html https://flaviocopes.com/

También puede guardar un archivo por su nombre en el servidor, utilizando elOopción:

curl -O https://flaviocopes.com/index.html

Usando la autenticación HTTP

Si un recurso requiere autenticación HTTP básica, puede utilizar lauopción para pasar el usuario: valores de contraseña:

curl -u user:pass https://flaviocopes.com/

Establecer un agente de usuario diferente

El agente de usuario le dice al servidor qué cliente está realizando la solicitud. Por defecto, curl envía elcurl/<version>agente de usuario, como:curl/7.54.0.

Puede especificar un agente de usuario diferente mediante el--user-agentopción:

curl --user-agent "my-user-agent" https://flaviocopes.com

Inspeccionando todos los detalles de la solicitud y la respuesta.

Utilizar el--verboseopción para hacer que curl muestre todos los detalles de la solicitud y la respuesta:

curl --verbose -I https://flaviocopes.com/
*   Trying 178.128.202.129...
* TCP_NODELAY set
* Connected to flaviocopes.com (178.128.202.129) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: flaviocopes.com
* Server certificate: Let's Encrypt Authority X3
* Server certificate: DST Root CA X3
> HEAD / HTTP/1.1
> Host: flaviocopes.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Cache-Control: public, max-age=0, must-revalidate
Cache-Control: public, max-age=0, must-revalidate
< Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=UTF-8
< Date: Mon, 30 Jul 2018 08:08:41 GMT
Date: Mon, 30 Jul 2018 08:08:41 GMT
...

Copying any browser network request to a curl command

When inspecting any network request using the Chrome Developer Tools, you have the option to copy that request to a curl request:

curl 'https://github.com/curl/curl' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Upgrade-Insecure-Requests: 1' -H 'DNT: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: https://www.google.it/' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9,it;q=0.8' -H 'Cookie: _octo=GH1.1.933116459.1507545550; _ga=GA1.2.643383860.1507545550; tz=Europe%2FRome; user_session=XXXXX; __Host-user_session_same_site=YYYYYY; dotcom_user=flaviocopes; logged_in=yes; has_recent_activity=1; _gh_sess=ZZZZZZ' --compressed

More network tutorials: