Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| tutorial_de_curl [2024/07/06 19:40] – [Solicitudes Condicionales] peron | tutorial_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 " | **curl** significa " | ||
| - | 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# |
| - | + | ||
| - | + | ||
| - | + | ||
| + | ===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 | + | |
| - | </ | + | |
| - | Para ver la versión completa del manual, puedes probar con: | + | |
| - | <code bash> | + | |
| - | + | ||
| ====Sintaxis de Curl==== | ====Sintaxis de Curl==== | ||
| - | ===Sintaxis básica=== | + | Desde la [[interpretes de comandos|línea de comandos]] operarás el comando '' |
| - | Curl actualmente cuenta con unas 250 opciones. | + | ===Sintaxis básica de Curl=== |
| - | Para curl, todo lo que comience con '' | + | Para curl, todo lo que comience con '' |
| - | Existen opciones que usan sintaxis cortas (con un guión '' | + | Existen |
| <code bash> | <code bash> | ||
| Línea 34: | Línea 23: | ||
| </ | </ | ||
| - | ...y opciones de sintaxis largas (con doble guión '' | + | ...y //opciones |
| <code bash> | <code bash> | ||
| Línea 40: | Línea 29: | ||
| </ | </ | ||
| - | >Todas las opciones están disponibles en el formato " | + | > Todas las //opciones |
| ===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:// | curl --silent http:// | ||
| </ | </ | ||
| - | o desactivarlas con: | + | |
| + | ...o desactivarlas con: | ||
| <code bash> | <code bash> | ||
| curl --no-silent http:// | curl --no-silent http:// | ||
| Línea 53: | Línea 47: | ||
| ==Opciones Argumentadas== | ==Opciones Argumentadas== | ||
| - | Algunas opciones aceptan argumentos. | + | Algunas opciones |
| <code bash> | <code bash> | ||
| Línea 59: | Línea 53: | ||
| </ | </ | ||
| - | Los argumentos que contienen espacios deben entrecomillarse ''< | + | Aquellos |
| <code bash> | <code bash> | ||
| curl -o /dev/null --write-out "type: %{content_type}" | curl -o /dev/null --write-out "type: %{content_type}" | ||
| 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 '' | + | Todo aquello que pasemos a curl que no comience con '' |
| Curl soporta URLs según la forma de URIs aceptada en la protocolización RFC 3986, o sea: ''< | Curl soporta URLs según la forma de URIs aceptada en la protocolización RFC 3986, o sea: ''< | ||
| Línea 85: | Línea 79: | ||
| ===Solicitud=== | ===Solicitud=== | ||
| - | Si debemos | + | Si fuese necesario |
| <code bash> | <code bash> | ||
| - | curl http:// | + | curl http:// |
| </ | </ | ||
| ===URL Múltiples=== | ===URL Múltiples=== | ||
| - | Curl acepta cualquier | + | Curl acepta cualquier |
| <code bash> | <code bash> | ||
| Línea 110: | Línea 104: | ||
| <code bash> | <code bash> | ||
| curl --output-dir /tmp | curl --output-dir /tmp | ||
| - | -O http:// | + | -O http:// |
| - | -O http:// | + | -O http:// |
| && ls /tmp | && ls /tmp | ||
| Línea 126: | Línea 120: | ||
| ===Englobado de URL=== | ===Englobado de URL=== | ||
| - | Curl expande automáticamente | + | Curl expande automáticamente |
| Por ejemplo, este comando solicita tres rutas distintas ('' | Por ejemplo, este comando solicita tres rutas distintas ('' | ||
| Línea 132: | Línea 126: | ||
| <code bash> | <code bash> | ||
| curl --output-dir /tmp -o " | curl --output-dir /tmp -o " | ||
| - | http:// | + | http:// |
| && ls /tmp | && ls /tmp | ||
| </ | </ | ||
| - | Si en las URLs indicadas existiesen los caracteres interpretables de englobación | + | Si en las URLs indicadas existiesen los caracteres interpretables de englobado |
| Línea 159: | Línea 153: | ||
| curl --config / | curl --config / | ||
| </ | </ | ||
| + | |||
| + | ====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 " | ||
| + | -H " | ||
| + | </ | ||
| + | |||
| + | En ocasiones no deseamos hacer esto. Para resetear el estado entre las llamadas a las URLS, debemos recurrir a la opción '' | ||
| + | |||
| + | <code bash> | ||
| + | curl | ||
| + | -H " | ||
| + | --next | ||
| + | -H " | ||
| + | </ | ||
| + | |||
| ====Medidor de Progreso==== | ====Medidor de Progreso==== | ||
| - | Curl cuenta con dos medidores de progreso. | + | Curl cuenta con dos medidores de progreso |
| ==Indicador de progreso verboso== | ==Indicador de progreso verboso== | ||
| Línea 169: | Línea 183: | ||
| curl --no-silent http:// | curl --no-silent http:// | ||
| </ | </ | ||
| + | |||
| ==Indicador de progreso compacto== | ==Indicador de progreso compacto== | ||
| - | El otro es indicador | + | El otro es indicador |
| <code bash> | <code bash> | ||
| curl --no-silent --progress-bar http:// | curl --no-silent --progress-bar http:// | ||
| </ | </ | ||
| + | |||
| ==Desactivar indicación de progreso== | ==Desactivar indicación de progreso== | ||
| La opción '' | La opción '' | ||
| Línea 182: | Línea 198: | ||
| </ | </ | ||
| - | ====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 " | ||
| - | -H " | ||
| - | </ | ||
| - | |||
| - | En ocasiones no deseamos hacer esto. Para resetear el estado entre las llamadas a las URLS, debemos recurrir a la opción '' | ||
| - | |||
| - | <code bash> | ||
| - | curl | ||
| - | -H " | ||
| - | --next | ||
| - | -H " | ||
| - | </ | ||
| ====Curl Básico==== | ====Curl Básico==== | ||
| Línea 238: | Línea 236: | ||
| http:// | http:// | ||
| </ | </ | ||
| + | |||
| ...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 '' | Puedes usar '' | ||
| - | ===Reintentar=== | + | ===Reintentado=== |
| A veces puede suceder que el huésped remoto esté indispuesto. Para hacer caso a estas situaciones, | A veces puede suceder que el huésped remoto esté indispuesto. Para hacer caso a estas situaciones, | ||
| Línea 303: | Línea 303: | ||
| Por ejemplo, para permitir no menos de 10 bytes/ | Por ejemplo, para permitir no menos de 10 bytes/ | ||
| + | |||
| <code bash> | <code bash> | ||
| curl -v --speed-limit 10 --speed-time 3 http:// | curl -v --speed-limit 10 --speed-time 3 http:// | ||
| Línea 607: | Línea 608: | ||
| curl -d @/ | curl -d @/ | ||
| http:// | http:// | ||
| - | < | + | </code> |
| Línea 616: | Línea 617: | ||
| <code bash> | <code bash> | ||
| curl --json ' | curl --json ' | ||
| - | < | + | </code> |
| Línea 626: | Línea 627: | ||
| <code bash> | <code bash> | ||
| curl --data-urlencode " | curl --data-urlencode " | ||
| - | < | + | </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=@/ | curl -F nombre=Fulana -F edad=25 -F foto=@/ | ||
| http:// | http:// | ||
| - | < | + | </code> |
| ===Redirecciones=== | ===Redirecciones=== | ||
| Línea 664: | Línea 665: | ||
| <code bash> | <code bash> | ||
| curl -i http:// | curl -i http:// | ||
| - | < | + | </code> |
| Para hacer que Curl sigua redirecciones, | Para hacer que Curl sigua redirecciones, | ||
| Línea 670: | Línea 671: | ||
| <code bash> | <code bash> | ||
| curl -L http:// | curl -L http:// | ||
| - | < | + | </code> |
| Para protegerse contra redirecciones en bucle sinfín, use el limitador '' | Para protegerse contra redirecciones en bucle sinfín, use el limitador '' | ||
| Línea 676: | Línea 677: | ||
| <code bash> | <code bash> | ||
| curl -L --max-redirs 3 http:// | curl -L --max-redirs 3 http:// | ||
| - | < | + | </code> |
| ===HTTP PUT=== | ===HTTP PUT=== | ||
| Línea 686: | Línea 687: | ||
| curl -T / | curl -T / | ||
| - | < | + | </code> |
| En ocasiones, se utiliza '' | En ocasiones, se utiliza '' | ||
| Línea 694: | Línea 695: | ||
| -d ' | -d ' | ||
| http:// | http:// | ||
| - | < | + | </code> |
| ==Cookies== | ==Cookies== | ||
| Línea 717: | Línea 718: | ||
| && cat / | && cat / | ||
| - | < | + | </code> |
| ...Las llamadas subsecuentes con '' | ...Las llamadas subsecuentes con '' | ||
| Línea 725: | Línea 726: | ||
| <code bash> | <code bash> | ||
| curl -j -b / | curl -j -b / | ||
| - | < | + | </code> |
| ===Servicios alternativos=== | ===Servicios alternativos=== | ||
| Línea 738: | Línea 739: | ||
| && cat / | && cat / | ||
| - | < | + | </code> |
| ===Seguridad Estricta de Transporte HTTP=== | ===Seguridad Estricta de Transporte HTTP=== | ||
| Línea 751: | Línea 752: | ||
| && cat /tmp/hsts | && cat /tmp/hsts | ||
| - | < | + | </code> |
| + | |||
| + | ====Documentación==== | ||
| + | Curl cuenta con una extensa documentación de referencia. Puedes verla con: | ||
| + | <code bash> | ||
| + | curl --help | ||
| + | </ | ||
| + | |||
| + | Para ver la versión completa del manual, puedes probar con: | ||
| + | <code bash> | ||
| + | |||
| + | ====Conclusión==== | ||
| + | Curl es una de las herramientas predilectas para las transferencias electrónicas, | ||
| + | |||
| + | <code bash> | ||
| + | gab -m " | ||
| + | </ | ||
