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 puedes encontrar.
Es una de esas herramientas que, una vez que sabes cómo usarlas, siempre vuelves a ellas. El mejor amigo de un programador.
Es universal, funciona en Linux, Mac y Windows. Consulta la guía de instalación oficial para instalarlo en tu 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 al trabajar con solicitudes HTTP.
Estos ejemplos implican trabajar con HTTP, el protocolo más popular.
- Realizar una solicitud HTTP GET
- Obtener los encabezados de respuesta HTTP
- Obtenga únicamente los encabezados de respuesta HTTP
- Realizar una solicitud HTTP POST
- Realizar una solicitud HTTP POST enviando JSON
- Realizar una solicitud HTTP PUT
- Seguir una redirección
- Almacenar la respuesta en un archivo
- Uso de autenticación HTTP
- Establecer un agente de usuario diferente
- Inspeccionar todos los detalles de la solicitud y la respuesta.
- Copiar cualquier solicitud de red del navegador a un comando curl
Cuando realiza una solicitud, curl devolverá el cuerpo de la respuesta:
curl https://flaviocopes.com/ De forma predeterminada, los encabezados de respuesta están ocultos en la salida de curl. Para mostrarlos, utilice la iopción:
curl -i https://flaviocopes.com/ Al utilizar esta Iopción, puede obtener solo los encabezados y no el cuerpo de la respuesta:
curl -I https://flaviocopes.com/ La Xopción le permite cambiar el método HTTP utilizado. De manera predeterminada, se utiliza GET y es lo mismo que escribir
curl -X GET https://flaviocopes.com/ El uso -X POSTrealizará una solicitud POST.
Puede realizar una solicitud POST pasando datos codificados en URL:
curl -d "option=valuesomething=anothervalue" -X POST https://flaviocopes.com/ En este caso application/x-www-form-urlencodedse envía el tipo de contenido.
En lugar de publicar datos codificados en URL, como en el ejemplo anterior, es posible que desees enviar JSON.
En este caso, es necesario configurar explícitamente el encabezado Content-Type mediante la Hopción:
curl -d '{"option": "value", "something": "anothervalue"}' -H "Content-Type: application/json" -X POST https://flaviocopes.com/ También puedes enviar un archivo JSON desde tu disco:
curl -d "@my-file.json" -X POST https://flaviocopes.com/ El concepto es el mismo que para las solicitudes POST, solo cambia el método HTTP usando-X PUT
Una respuesta de redirección como 301, que especifica el Locationencabezado de respuesta, puede ser seguida automáticamente especificando la Lopción:
curl http://flaviocopes.com/ no seguirá automáticamente a la versión HTTPS que configuré para redirigir, pero esto lo hará:
curl -L http://flaviocopes.com/ Usando la oopción puedes indicarle a curl que guarde la respuesta en un archivo:
curl -o file.html https://flaviocopes.com/ También puedes simplemente guardar un archivo por su nombre en el servidor, usando la Oopción:
curl -O https://flaviocopes.com/index.html Si un recurso requiere autenticación HTTP básica, puede utilizar la uopción para pasar los valores de usuario:contraseña:
curl -u user:pass https://flaviocopes.com/ El agente de usuario le indica al servidor qué cliente está realizando la solicitud. De manera predeterminada, curl envía el curl/versionagente de usuario, como: curl/7.54.0.
Puede especificar un agente de usuario diferente utilizando la --user-agentopción:
curl --user-agent "my-user-agent" https://flaviocopes.com Utilice la --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 OKHTTP/1.1 200 OK Cache-Control: public, max-age=0, must-revalidateCache-Control: public, max-age=0, must-revalidate Content-Type: text/html; charset=UTF-8Content-Type: text/html; charset=UTF-8 Date: Mon, 30 Jul 2018 08:08:41 GMTDate: Mon, 30 Jul 2018 08:08:41 GMT... Al inspeccionar cualquier solicitud de red mediante las herramientas para desarrolladores de Chrome , tiene la opción de copiar esa solicitud a una solicitud curl:
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 Tal vez te puede interesar:
- Introducción a React
- Agregar evento de clic a los elementos DOM devueltos desde querySelectorAll
- Cómo cambiar el valor de un nodo DOM
- Cómo comprobar si un elemento DOM tiene una clase