Herramientas de usuario

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
tutorial_de_curl [2024/07/06 19:40] – [Solicitudes Condicionales] perontutorial_de_curl [2026/04/21 16:09] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
-=====Curl=====+=====Tutorial de Curl=====
  
 +====Introducción====
 **curl** significa "Cliente para URL". Se trata de un programa capaz de realizar transferencias de [[world wide web#internet|Internet]], donde actúa como [[cliente]], cargando y descargando datos desde un [[servidor]] remoto. Los datos pueden responder a cualquier tipología: texto, imágenes, audio, video, etcétera. **curl** significa "Cliente para URL". Se trata de un programa capaz de realizar transferencias de [[world wide web#internet|Internet]], donde actúa como [[cliente]], cargando y descargando datos desde un [[servidor]] remoto. Los datos pueden responder a cualquier tipología: texto, imágenes, audio, video, etcétera.
  
-Curl soporta tanto protocolos no autenticados (como [[HTTP]] o [[FTP]]), como sus contrapartes autenticados más modernos (como HTTPS o SFTP).  +Curl soporta tanto protocolos no autenticados (como [[world_wide_web#hipertexto|HTTP]] o [[FTP]]), como sus contrapartes autenticados más modernos (como HTTPS o SFTP). 
- +
- +
- +
  
 +===Historia===
 curl comenzó originalmente en 1996 como un proyecto llamado httpget, de Rafael Sagula, quien luego transfirió el control del mismo a Daniel Stenberg. Daniel lo renombró a curl en 1998, y en 2000 dividió la funcionalidad de red de datos para colocarla en la biblioteca libcurl. Por lo cual curl en sí se trasnformó en un envolvedor para la línea de comandos alrededor de dicha biblioteca. curl comenzó originalmente en 1996 como un proyecto llamado httpget, de Rafael Sagula, quien luego transfirió el control del mismo a Daniel Stenberg. Daniel lo renombró a curl en 1998, y en 2000 dividió la funcionalidad de red de datos para colocarla en la biblioteca libcurl. Por lo cual curl en sí se trasnformó en un envolvedor para la línea de comandos alrededor de dicha biblioteca.
  
-Curl se encuentra liberado bajo una licencia MIT ligeramente modificada, y soporta una gran cantidad de protocolos, desde [[HTTP]], [[FTP]], [[TELNET]], y [[GOPHER]], a protocolos de correo electrónico. Opera en 92 sistemas operativos en cuenta con más de 20 mil millones de instalaciones en todo el mundo. +Curl se encuentra liberado bajo una licencia MIT ligeramente modificada. Opera en 92 sistemas operativos en cuenta con más de 20 mil millones de instalaciones en todo el mundo.
- +
-Curl cuenta con una extensa documentación de referencia. Puedes verla con: +
-<code bash> +
-curl --help +
-</code> +
-Para ver la versión completa del manual, puedes probar con: +
-<code bash>curl --manual  | less</code> +
- +
 ====Sintaxis de Curl==== ====Sintaxis de Curl====
-===Sintaxis básica===+Desde la [[interpretes de comandos|línea de comandos]] operarás el comando ''curl'' , haciendo caso a las reglas de sintaxis del mismo.
  
-Curl actualmente cuenta con unas 250 opciones.+===Sintaxis básica de Curl===
  
-Para curl, todo lo que comience con ''-'' o ''--'' es una //opción//.+Para curl, todo lo que comience con ''-'' o ''--'' lo interpretará como una __opción de curl__.
  
-Existen opciones que usan sintaxis cortas (con un guión ''-'')+Existen //opciones de curl// que usan sintaxis cortas (con un guión ''-''):
  
 <code bash> <code bash>
Línea 34: Línea 23:
 </code> </code>
  
-...y opciones de sintaxis largas (con doble guión ''--''):+...y //opciones de curl// de sintaxis largas (usan doble guión ''--''):
  
 <code bash> <code bash>
Línea 40: Línea 29:
 </code> </code>
  
->Todas las opciones están disponibles en el formato "largo", pero las más usadas son las que usan la versión "corta".+> Todas las //opciones de curl// están disponibles en el formato "largo", pero las más usadas son las que usan la versión "corta"El programa cuenta actualmente con unas 250 //opciones//, pero en este tutorial dejaremos de lado aquellas que se usan en otros protocolos distintos a http/https. 
 ===Sintaxis complejas=== ===Sintaxis complejas===
 +Las órdenes más complejas recurren a este tipo de sintaxis.
 +
 ==Opciones Boleanas== ==Opciones Boleanas==
-Algunas opciones son del tipo booleano. Podremos activarlas con+Algunas opciones son del tipo booleano. Podremos activarlas con:
 <code bash> <code bash>
 curl --silent http://httpbin/uuid curl --silent http://httpbin/uuid
 </code> </code>
-o desactivarlas con:+ 
 +...o desactivarlas con: 
 <code bash> <code bash>
 curl --no-silent http://httpbin/uuid curl --no-silent http://httpbin/uuid
Línea 53: Línea 47:
  
 ==Opciones Argumentadas== ==Opciones Argumentadas==
-Algunas opciones aceptan argumentos.+Algunas opciones de curl aceptan argumentos, que permiten especificarle más definidamente qué es lo que queremos que haga:
  
 <code bash> <code bash>
Línea 59: Línea 53:
 </code> </code>
  
-Los argumentos que contienen espacios deben entrecomillarse ''<nowiki>"..."</nowiki>'':+Aquellos argumentos que contienen espacios en blanco deben entrecomillarse''<nowiki>"..."</nowiki>''. Por ejemplo: 
 <code bash> <code bash>
 curl -o /dev/null --write-out "type: %{content_type}" http://httpbin/uuid curl -o /dev/null --write-out "type: %{content_type}" http://httpbin/uuid
Línea 68: Línea 63:
  
 >Los datos transferidos sobre un protocolo no autenticado pueden ser intereceptados y utilizados, de manera que siempre es mejor usar los autenticados.  >Los datos transferidos sobre un protocolo no autenticado pueden ser intereceptados y utilizados, de manera que siempre es mejor usar los autenticados. 
- 
  
  
 ====URLs==== ====URLs====
  
-Para curl, todo lo que no comience con ''-'' o ''--'', es una URL.+Todo aquello que pasemos a curl que no comience con ''-'' o ''--'', será considerado una URL. 
  
 Curl soporta URLs según la forma de URIs aceptada en la protocolización RFC 3986, o sea: ''<nowiki>esquema://usuaria:contraseña@huésped:puerto/ruta?solicitud#fragmento</nowiki>''. En esta: Curl soporta URLs según la forma de URIs aceptada en la protocolización RFC 3986, o sea: ''<nowiki>esquema://usuaria:contraseña@huésped:puerto/ruta?solicitud#fragmento</nowiki>''. En esta:
Línea 85: Línea 79:
 ===Solicitud=== ===Solicitud===
  
-Si debemos pasar gran cantidad de parámetros de URL, la parte que involucra a la //solicitud// puede resultar bastante larga. La opción ''--url-query'' permite especificar separadamente estas partes para mayor comodidad:+Si fuese necesario pasar a curl una gran cantidad de parámetros de URL, la parte que involucra a la //solicitud// podría resultar extensamente larga. La opción ''--url-query'' permite especificar separadamente estas partespara que pasarle URL largas nos resulte más cómodo:
  
 <code bash> <code bash>
-curl http://httpbin/get --url-query "name=Alice" --url-query "age=25"+curl http://httpbin/get --url-query "name=Fulana" --url-query "edad=25"
 </code> </code>
  
 ===URL Múltiples=== ===URL Múltiples===
  
-Curl acepta cualquier número de URLs, cada una de las cuales requiere un destino (ya sea un fichero o stdout). Por ejemplo, este comando guardará la primer UUID en ''/tmp/uuid1.json'' y la segunda UUID como ''/tmp/uuid.json'':+Curl acepta cualquier cantidad de URLs, pero cada una de las cuales requerirá definirle un destino (ya sea un fichero o stdout). Por ejemplo, este comando guardará la primer UUID en ''/tmp/uuid1.json'' y la segunda UUID en ''/tmp/uuid2.json'':
  
 <code bash> <code bash>
Línea 110: Línea 104:
 <code bash> <code bash>
 curl --output-dir /tmp curl --output-dir /tmp
-  -O http://httpbin/anything/uno +  -O http://httpbin/cualquier/ruta/uno 
-  -O http://httpbin/anything/dos+  -O http://httpbin/cualquier/ruta/dos
  
 && ls /tmp && ls /tmp
Línea 126: Línea 120:
 ===Englobado de URL=== ===Englobado de URL===
  
-Curl expande automáticamente las expresiones englobadas en URLs múltiples URLs específicas.+Curl expande automáticamente aquellas expresiones englobadas en URLs, en múltiples URLs específicas.
  
 Por ejemplo, este comando solicita tres rutas distintas (''al'', ''bt'', ''gm''), cada una con dos parámetros distintos (''num=1'' y ''num=2''), totalizando seis URLs: Por ejemplo, este comando solicita tres rutas distintas (''al'', ''bt'', ''gm''), cada una con dos parámetros distintos (''num=1'' y ''num=2''), totalizando seis URLs:
Línea 132: Línea 126:
 <code bash> <code bash>
 curl --output-dir /tmp -o "salida_#1_#2.txt" curl --output-dir /tmp -o "salida_#1_#2.txt"
-  http://httpbin/anything/{al,bt,gm}?num=[1-2]+  http://httpbin/cualquier/ruta/{al,bt,gm}?num=[1-2]
  
 && ls /tmp && ls /tmp
 </code> </code>
  
-Si en las URLs indicadas existiesen los caracteres interpretables de englobación (''<nowiki>[]{}</nowiki>''), esto provocaría un tremendo dolor de cabeza. Sin embargo, podremos desactivar su interpretado de englobación gracias a la opción ''--globoff''. De este modo, Curl tratará las URLs de manera literal, sin importar que contengan dichos caracteres.+Si en las URLs indicadas existiesen los caracteres interpretables de englobado (''<nowiki>[]{}</nowiki>''), esto provocaría un tremendo dolor de cabeza. Sin embargo, podremos desactivar su interpretado de englobado gracias a la opción ''--globoff''. De este modo, Curl tratará las URLs de manera literal, sin importar que contengan dichos caracteres.
  
  
Línea 159: Línea 153:
 curl --config /sandbox/.curlrc http://httpbin/uuid curl --config /sandbox/.curlrc http://httpbin/uuid
 </code> </code>
 +
 +====Reseteo de estado====
 +
 +Debemos estar atentos que al configurar las opciones de curl, tal configuración se aplicará a todas las URLs que procese curl. Por ejemplo, aquí ambos encabezados se envían a ambas URLs:
 +
 +<code bash>
 +curl
 +  -H "x-num: uno" http://httpbin/headers?1
 +  -H "x-num: dos" http://httpbin/headers?2
 +</code>
 +
 +En ocasiones no deseamos hacer esto. Para resetear el estado entre las llamadas a las URLS, debemos recurrir a la opción ''--next'':
 +
 +<code bash>
 +curl
 +  -H "x-num: uno" http://httpbin/encabezados?1
 +  --next
 +  -H "x-num: dos" http://httpbin/encabezados?2
 +</code>
 +
  
 ====Medidor de Progreso==== ====Medidor de Progreso====
  
-Curl cuenta con dos medidores de progreso. +Curl cuenta con dos medidores de progreso distintos para saber cómo va la transferencia ordenada.
  
 ==Indicador de progreso verboso== ==Indicador de progreso verboso==
Línea 169: Línea 183:
 curl --no-silent http://httpbin/uuid curl --no-silent http://httpbin/uuid
 </code> </code>
 +
 ==Indicador de progreso compacto== ==Indicador de progreso compacto==
-El otro es indicador compacto:+El otro es indicador compactito:
  
 <code bash> <code bash>
 curl --no-silent --progress-bar http://httpbin/uuid curl --no-silent --progress-bar http://httpbin/uuid
 </code> </code>
 +
 ==Desactivar indicación de progreso== ==Desactivar indicación de progreso==
 La opción ''--silent'' desactiva completamente el medidor: La opción ''--silent'' desactiva completamente el medidor:
Línea 182: Línea 198:
 </code> </code>
  
-====Reseteo de estado==== 
- 
-Al configurar las opciones de curl, estas se aplicarán a todas las URLs que dicho programa procese. Por ejemplo, aquí ambos encabezados se envían a ambas URLs: 
- 
-<code bash> 
-curl 
-  -H "x-num: uno" http://httpbin/headers?1 
-  -H "x-num: dos" http://httpbin/headers?2 
-</code> 
- 
-En ocasiones no deseamos hacer esto. Para resetear el estado entre las llamadas a las URLS, debemos recurrir a la opción ''--next'': 
- 
-<code bash> 
-curl 
-  -H "x-num: uno" http://httpbin/headers?1 
-  --next 
-  -H "x-num: dos" http://httpbin/headers?2 
-</code> 
  
 ====Curl Básico==== ====Curl Básico====
Línea 238: Línea 236:
   http://httpbin/status/429   http://httpbin/status/429
 </code> </code>
 +
 ...o algunos encabezados de la respuesta: ...o algunos encabezados de la respuesta:
 +
 <code bash> <code bash>
 curl curl
Línea 266: Línea 266:
 Puedes usar ''--max-filesize'' (en bytes) para limitar el tamaño máximo de respuesta permitido (aunque esto a menudo no se conoce por adelantado, lo que podría provocar fallas). Puedes usar ''--max-filesize'' (en bytes) para limitar el tamaño máximo de respuesta permitido (aunque esto a menudo no se conoce por adelantado, lo que podría provocar fallas).
  
-===Reintentar===+===Reintentado===
  
 A veces puede suceder que el huésped remoto esté indispuesto. Para hacer caso a estas situaciones, Curl provee la opción ''--retry [numero]''. Si la solicitud falla, Curl lo intentará nuevamente, pero no más allá de la cantidad de veces indicada por ''numero'': A veces puede suceder que el huésped remoto esté indispuesto. Para hacer caso a estas situaciones, Curl provee la opción ''--retry [numero]''. Si la solicitud falla, Curl lo intentará nuevamente, pero no más allá de la cantidad de veces indicada por ''numero'':
Línea 303: Línea 303:
  
 Por ejemplo, para permitir no menos de 10 bytes/segundo durante un intervalo de 3 segundos: Por ejemplo, para permitir no menos de 10 bytes/segundo durante un intervalo de 3 segundos:
 +
 <code bash> <code bash>
 curl -v --speed-limit 10 --speed-time 3 http://httpbin/get curl -v --speed-limit 10 --speed-time 3 http://httpbin/get
Línea 607: Línea 608:
 curl -d @/tmp/datos.txt -H "content-type: text/plain" curl -d @/tmp/datos.txt -H "content-type: text/plain"
   http://httpbin/post   http://httpbin/post
-<code>+</code>
  
  
Línea 616: Línea 617:
 <code bash> <code bash>
 curl --json '{"nombre": "fulana"}' http://httpbin/post curl --json '{"nombre": "fulana"}' http://httpbin/post
-<code>+</code>
  
  
Línea 626: Línea 627:
 <code bash> <code bash>
 curl --data-urlencode "Nombre: Fulana Mengana" http://httpbin/post curl --data-urlencode "Nombre: Fulana Mengana" http://httpbin/post
-<code>+</code>
  
 ==Envío de formularios multiparte== ==Envío de formularios multiparte==
Línea 654: Línea 655:
 curl -F nombre=Fulana -F edad=25 -F foto=@/tmp/fulana.png curl -F nombre=Fulana -F edad=25 -F foto=@/tmp/fulana.png
   http://httpbin/post   http://httpbin/post
-<code>+</code>
  
 ===Redirecciones=== ===Redirecciones===
Línea 664: Línea 665:
 <code bash> <code bash>
 curl -i http://httpbin/redirect/1 curl -i http://httpbin/redirect/1
-<code>+</code>
  
 Para hacer que Curl sigua redirecciones, use ''--follow'' (''-L''): Para hacer que Curl sigua redirecciones, use ''--follow'' (''-L''):
Línea 670: Línea 671:
 <code bash> <code bash>
 curl -L http://httpbin/redirect/1 curl -L http://httpbin/redirect/1
-<code>+</code>
  
 Para protegerse contra redirecciones en bucle sinfín, use el limitador ''--max-redirs'', por ejemplo: Para protegerse contra redirecciones en bucle sinfín, use el limitador ''--max-redirs'', por ejemplo:
Línea 676: Línea 677:
 <code bash> <code bash>
 curl -L --max-redirs 3 http://httpbin/redirect/10 curl -L --max-redirs 3 http://httpbin/redirect/10
-<code>+</code>
  
 ===HTTP PUT=== ===HTTP PUT===
Línea 686: Línea 687:
  
 curl -T /tmp/hola.txt http://httpbin/put curl -T /tmp/hola.txt http://httpbin/put
-<code>+</code>
  
 En ocasiones, se utiliza ''PUT'' para hacer solicitudes a APIs REST. Para ellas, utilice ''--request'' (''-X'') para establecer el método, y ''--data'' (''-d'') para enviar los datos: En ocasiones, se utiliza ''PUT'' para hacer solicitudes a APIs REST. Para ellas, utilice ''--request'' (''-X'') para establecer el método, y ''--data'' (''-d'') para enviar los datos:
Línea 694: Línea 695:
   -d '{"nombre": "fulana"}'   -d '{"nombre": "fulana"}'
   http://httpbin/put   http://httpbin/put
-<code>+</code>
  
 ==Cookies== ==Cookies==
Línea 717: Línea 718:
  
 && cat /tmp/cookies && cat /tmp/cookies
-<code>+</code>
  
 ...Las llamadas subsecuentes con ''-b /tmp/cookies'' enviarán la cookie con la //sessionid// indicada de vuelta al servidor. ...Las llamadas subsecuentes con ''-b /tmp/cookies'' enviarán la cookie con la //sessionid// indicada de vuelta al servidor.
Línea 725: Línea 726:
 <code bash> <code bash>
 curl -j -b /tmp/cookies http://httpbin/get curl -j -b /tmp/cookies http://httpbin/get
-<code bash>+</code>
  
 ===Servicios alternativos=== ===Servicios alternativos===
Línea 738: Línea 739:
  
 && cat /tmp/servicios_alternativos && cat /tmp/servicios_alternativos
-<code>+</code>
  
 ===Seguridad Estricta de Transporte HTTP=== ===Seguridad Estricta de Transporte HTTP===
Línea 751: Línea 752:
  
 && cat /tmp/hsts && cat /tmp/hsts
-<code>+</code> 
 + 
 +====Documentación==== 
 +Curl cuenta con una extensa documentación de referencia. Puedes verla con: 
 +<code bash> 
 +curl --help 
 +</code> 
 + 
 +Para ver la versión completa del manual, puedes probar con: 
 +<code bash>curl --manual  | less</code> 
 + 
 +====Conclusión==== 
 +Curl es una de las herramientas predilectas para las transferencias electrónicas, e intentar dominarlo en texto-plano.xyz requiere alardearlo con [[gab]]: 
 + 
 +<code bash> 
 +gab -m "¡Aprendí a usar curl, la “navaja suiza del hacker” en texto-plano.xyz!" 
 +</code> 
  

Este sitio web utiliza cookies para guardar datos esenciales de su actividad, como su autenticación. Al entrar acepta el uso de cookies.

Más información