Configuración básica
Podemos añadir estos argumentos de entrada del comando curl a un fichero
.curlrc en nuestro directorio de usuario y entonces se ejecutarán siempre.
Silenciar salida de metadatos de curl
De normal, al hacer curl http://example.com curl imprime una cabecera con
metadatos del estado de la comunicación.
curl http://example.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12051 100 12051 0 0 16110 0 --:--:-- --:--:-- --:--:-- 16089
Si esto nos molesta, lo podemos eliminar con el argumento --silent.
Mostrar cabeceras HTTP
Normalmente curl no va a mostrar las cabeceras HTTP en su salida. Si queremos
verlas, podemos usar el argumento --dump-header /dev/stderr
curl --dump-header /dev/stderr http://example.com
HTTP/2 200
date: Wed, 21 Jul 2021 09:37:08 GMT
content-type: application/json
content-length: 12051
x-request-id: 9ff84e15fc2b8258ab994008c5c2ad60
strict-transport-security: max-age=15724800; includeSubDomains
access-control-allow-origin: *
access-control-allow-credentials: true
...
Acabar con salto de línea
Si los datos mostrados por curl en su salida no contenían un salto de línea al
final el prompt de nuestro terminal se puede ver encajado al final de la
respuesta de curl, lo cual no es muy conveniente. Para arreglar esto podemos
usar el argumento --write-out "\n"
Mostrar respuestas JSON formateadas
Podemos usar las herramientas json_pp o
jq en nuestros comandos, pasándoles la
respuesta del comando curl mediante una tubería.
curl http://example.com | json_pp
curl http://example.com | jq
La más conveniente a mi parecer es jq, ya que colorea el JSON resaltando la
sintaxis.
Contar número de elementos en la respuesta JSON
Podemos contar el número de elementos devueltos en una respuesta JSON con el
comando jq también:
curl http://example.com | jq length
34
Si el campo que queremos contar está anidado, por ejemplo si la respuesta fuera así:
{
"results": {
"items": [
1,
2,
3,
4
]
}
}
podríamos hacer lo siguiente:
curl http://example.com | jq -r '.results.items | length'
4
Hacer POST a una API REST JSON
curl -X POST "http://example.com/items"
-H "Content-Type: application/json"
--data '{"name": "New Item", "quantity": 25, price: 12.5}'
Usar el contenido de un fichero JSON como datos de POST
Si tenemos un fichero .json cuyo contenido queremos enviar como cuerpo de una
petición POST, podemos hacer por ejemplo:
curl -X POST "http://example.com/items"
-H "Content-Type: application/json"
-d @mi_fichero.json
Enviar ficheros en una petición POST
curl -X POST "http://example.com/items"
-F parámetro_formulario=@mi_fichero.pdf
Autenticación mediante cabecera HTTP (API token)
curl http://example.com
-H "Auhtorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyJ9"