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 05:48] – [URLs] 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===== |
| - | **curl** significa "cliente | + | ====Introducción==== |
| + | **curl** significa "Cliente | ||
| - | >Una transferencia de internet es una carga o descarga empleando un protocolo específico (curl soporta | + | Curl soporta |
| - | + | ||
| - | Soporta una gran cantidad de protocolos, desde HTTP, FTP y TELNET a IMAP, LDAP, y GOPHER. Operae en 92 sistemas operativos en cuenta con más de 20 mil millones de instalaciones en todo el mundo. Curl está liberado bajo una licencia MIT ligeramente modificada. | + | |
| + | ===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. | ||
| - | En total, | + | 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. |
| + | ====Sintaxis de Curl==== | ||
| + | Desde la [[interpretes de comandos|línea de comandos]] operarás el comando '' | ||
| - | Ciclo de Lanzamientos | + | ===Sintaxis básica |
| - | Luego del lanzamiento, hay 10 días de espera, seguido por una ventana de 21 días para presentar funcionalidades nuevas, seguidas por un período de congelado | + | Para curl, todo lo que comience con '' |
| - | Curl cuenta con una extensa documentación | + | Existen // |
| - | + | ||
| - | curl --help | + | |
| - | + | ||
| - | Para ver la versión completa, puedes probar con curl --manual | + | |
| - | + | ||
| - | + | ||
| - | ====Opciones de la línea de Comando==== | + | |
| - | + | ||
| - | Curl se utiliza para realizar transferencias en Internet, donde actúa como [[cliente]], | + | |
| - | + | ||
| - | Curl soporta tanto protocolos no autenticados (como HTTP o FTP), como sus contrapartes autenticados (como HTTPS o SFTP). Los datos transferidos sobre un protocolo no autenticado pueden ser intereceptados y utilizados, de manera | + | |
| - | + | ||
| - | Curl actualmente cuenta con unas 250 opciones. | + | |
| - | + | ||
| - | Existen versiones | + | |
| <code bash> | <code bash> | ||
| Línea 36: | Línea 23: | ||
| </ | </ | ||
| - | ...y opciones largas (con guión | + | ...y //opciones |
| <code bash> | <code bash> | ||
| Línea 42: | Línea 29: | ||
| </ | </ | ||
| - | Todas las opciones están disponibles en el formato " | + | > Todas las //opciones |
| - | ====Opciones de Línea de Comandos ==== | + | ===Sintaxis complejas=== |
| + | Las órdenes más complejas recurren a este tipo de sintaxis. | ||
| - | Algunas opciones son del tipo booleano. Podremos activarlas con | + | ==Opciones Boleanas== |
| + | Algunas opciones son del tipo booleano. Podremos activarlas con: | ||
| <code bash> | <code bash> | ||
| curl --silent http:// | curl --silent http:// | ||
| </ | </ | ||
| - | o apagarlas: | + | |
| + | ...o desactivarlas con: | ||
| <code bash> | <code bash> | ||
| curl --no-silent http:// | curl --no-silent http:// | ||
| </ | </ | ||
| - | Algunas opciones aceptan argumentos | + | |
| + | ==Opciones Argumentadas== | ||
| + | Algunas opciones | ||
| <code bash> | <code bash> | ||
| curl --output / | curl --output / | ||
| </ | </ | ||
| - | Los argumentos que contienen espacios deben ir entrecomillados: | + | |
| + | Aquellos | ||
| <code bash> | <code bash> | ||
| curl -o /dev/null --write-out "type: %{content_type}" | curl -o /dev/null --write-out "type: %{content_type}" | ||
| </ | </ | ||
| - | ====URLs==== | ||
| - | Curl soporta URLs (en realidad, URIs) de manera similar a lo que define | + | ===Transmisiones No autenticadas=== |
| + | Curl puede desactivar la verificación | ||
| - | '' | + | >Los datos transferidos sobre un protocolo no autenticado pueden ser intereceptados y utilizados, de manera que siempre es mejor usar los autenticados. |
| - | * scheme define un protocolo (como https o ftp). Se es omitido, curl intentará adivinarlo. Los usuarios y contraseñas son credenciales de autenticación (pasar las credenciales en la URL generalmente no se permite por motivos de seguridad). | ||
| - | * Host es el nombre de host, nombre de dominio o dirección IP del servidor. | ||
| - | * port es el número de puerto. Si se omite, curl usará el puerto por defecto asociado con el scheme (tal como 80 para http o 443 para https). | ||
| - | * path es la ruta al recurso en el servidor. | ||
| - | * query es usualmente una secuencia de pares '' | ||
| - | Para curl, todo lo que comience con - o -- es una opción, y todo lo demás | + | ====URLs==== |
| + | |||
| + | 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: ''< | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| - | ====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 97: | Línea 98: | ||
| </ | </ | ||
| - | (de aquí en mas, en ocasiones mostraré comandos | + | > |
| La opción '' | La opción '' | ||
| + | |||
| <code bash> | <code bash> | ||
| curl --output-dir /tmp | curl --output-dir /tmp | ||
| - | -O http:// | + | -O http:// |
| - | -O http:// | + | -O http:// |
| && ls /tmp | && ls /tmp | ||
| </ | </ | ||
| - | Para guardar ambas respuestas en el mismo fichero, | + | Para guardar ambas respuestas en un mismo fichero, |
| <code bash> | <code bash> | ||
| curl http:// | curl http:// | ||
| Línea 117: | Línea 120: | ||
| ===Englobado de URL=== | ===Englobado de URL=== | ||
| - | Curl expande automáticamente | + | Curl expande automáticamente |
| - | Pore ejemplo, este comando solicita tres rutas distintas (al, bt, gm), cada una con dos parámetros distintos (num=1 y num=2), | + | Por ejemplo, este comando solicita tres rutas distintas ('' |
| <code bash> | <code bash> | ||
| curl --output-dir /tmp -o " | curl --output-dir /tmp -o " | ||
| - | http:// | + | http:// |
| && ls /tmp | && ls /tmp | ||
| </ | </ | ||
| - | Podremos | + | Si en las URLs indicadas existiesen los caracteres interpretables de englobado (''< |
| ====Transferencias en paralelo==== | ====Transferencias en paralelo==== | ||
| - | Es posible usar '' | + | Es posible usar la opción |
| ====Fichero de Configuración==== | ====Fichero de Configuración==== | ||
| - | En la medida que se incrementa el número de opciones, el comando Curl se volverá más difícil de descifrar. Para hacerlo más legible, | + | En la medida que se incrementa el número de opciones, el comando Curl se volverá más difícil de descifrar. Para hacerlo más legible, |
| + | < | ||
| Config file | Config file | ||
| output-dir /tmp | output-dir /tmp | ||
| show-error | show-error | ||
| silent | silent | ||
| + | </ | ||
| - | Por defecto, Curl lee el fichero de configuración desde '' | + | Por defecto, Curl lee el fichero de configuración desde '' |
| <code bash> | <code bash> | ||
| curl --config / | curl --config / | ||
| </ | </ | ||
| - | ====Medidores de Progreso==== | ||
| - | Curl cuenta con dos medidores | + | ====Reseteo |
| + | |||
| + | 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> | <code bash> | ||
| - | curl --no-silent | + | curl |
| + | | ||
| + | | ||
| </ | </ | ||
| - | El otro es compacto: | + | En ocasiones no deseamos hacer esto. Para resetear el estado entre las llamadas a las URLS, debemos recurrir a la opción '' |
| <code bash> | <code bash> | ||
| - | curl --no-silent | + | curl |
| + | | ||
| + | | ||
| + | | ||
| </ | </ | ||
| - | La opción '' | + | |
| + | ====Medidor de Progreso==== | ||
| + | |||
| + | Curl cuenta con dos medidores de progreso distintos para saber cómo va la transferencia ordenada. | ||
| + | |||
| + | ==Indicador de progreso verboso== | ||
| <code bash> | <code bash> | ||
| - | curl --silent http:// | + | curl --no-silent http:// |
| </ | </ | ||
| - | ====Reseteo | + | ==Indicador |
| + | El otro es indicador compactito: | ||
| - | Cuando configuras opciones, se aplican a todas las URLs que procesa Curl. Por ejemplo, aquí ambos encabezados se envían a ambas URLs: | ||
| <code bash> | <code bash> | ||
| - | curl | + | curl --no-silent |
| - | | + | |
| - | | + | |
| </ | </ | ||
| - | A veces esto no es lo que se desea. Para resetear el estado entre las llamadas a URLS, se usa la opción '' | + | ==Desactivar indicación de progreso== |
| + | La opción '' | ||
| <code bash> | <code bash> | ||
| - | curl | + | curl --silent |
| - | | + | |
| - | --next | + | |
| - | -H " | + | |
| </ | </ | ||
| + | |||
| ====Curl Básico==== | ====Curl Básico==== | ||
| - | Ahora que entendemos cómo funciona Curl y sus opciones, podremos ver sus opciones específicas. | + | Ahora que entendemos cómo funciona Curl y la sintaxis de sus opciones, podremos ver sus opciones específicas. |
| + | ==Versionado== | ||
| + | '' | ||
| - | --version (-V) explica todo sobre la versión instalada de curl: | ||
| <code bash> | <code bash> | ||
| curl -V | curl -V | ||
| </ | </ | ||
| - | Lista linea a línea las versiones de Curl en sí y sus dependencias, | + | |
| + | ...listará | ||
| '' | '' | ||
| + | |||
| <code bash> | <code bash> | ||
| curl -v http:// | curl -v http:// | ||
| </ | </ | ||
| - | Si '' | + | |
| + | Si '' | ||
| <code bash> | <code bash> | ||
| curl --trace - http:// | curl --trace - http:// | ||
| </ | </ | ||
| - | o bien '' | + | |
| + | ...o bien con '' | ||
| </code bash> | </code bash> | ||
| curl --trace-ascii - http:// | curl --trace-ascii - http:// | ||
| </ | </ | ||
| - | Usa '' | + | Utiliza |
| <code bash> | <code bash> | ||
| curl | curl | ||
| Línea 215: | 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 224: | Línea 247: | ||
| ====Descargas==== | ====Descargas==== | ||
| - | '' | + | La opción |
| <code bash> | <code bash> | ||
| Línea 232: | Línea 255: | ||
| </ | </ | ||
| - | Si dicho directorio | + | Si tal directorio |
| <code bash> | <code bash> | ||
| Línea 238: | Línea 261: | ||
| -O http:// | -O http:// | ||
| - | && cat /tmp/some/place/uuid | + | && cat /tmp/alguna/ruta/uuid |
| </ | </ | ||
| - | Puedes usar '' | + | Puedes usar '' |
| - | ====Reintentar==== | + | ===Reintentado=== |
| - | A veces puede que el huésped remoto | + | A veces puede suceder |
| <code bash> | <code bash> | ||
| Línea 253: | Línea 276: | ||
| (esta URL falla el 50% de las veces) | (esta URL falla el 50% de las veces) | ||
| - | Podrás indicar la cantidad máxima de tiempo | + | Podrás indicar la cantidad máxima de tiempo que Curl invertirá en intentar nuevamente |
| <code bash> | <code bash> | ||
| Línea 261: | Línea 284: | ||
| </ | </ | ||
| - | Para Curl, " | + | Para Curl, " |
| ====Subidas==== | ====Subidas==== | ||
| - | Curl a menudo se usa para bajar información (descargar) del servidor, pero también puede subirla. Para ello use la opción --upload-file (-T): | + | Curl a menudo se usa para bajar información (descargar) del servidor, pero también puede subirla. Para ello use la opción |
| <code bash> | <code bash> | ||
| - | echo hola > / | + | echo "hola Tercer Mundo!" |
| curl -T / | curl -T / | ||
| </ | </ | ||
| - | Para cargas HTTP, Curl usa el método PUT. | + | Para las cargas |
| ===Controles de Transferencia=== | ===Controles de Transferencia=== | ||
| - | Para detener descargas lentas, | + | Para detener |
| 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:// | ||
| </ | </ | ||
| - | Para limitar el uso de ancho de banda, | + | Para limitar el uso de ancho de banda, |
| <code bash> | <code bash> | ||
| Línea 306: | Línea 330: | ||
| ===Resolución de nombre=== | ===Resolución de nombre=== | ||
| - | Por defecto, curl usa tu servidor DNS para resolver | + | Por defecto, curl usa tu servidor DNS para resolver |
| <code bash> | <code bash> | ||
| - | curl --resolve | + | curl --resolve |
| http:// | http:// | ||
| + | </ | ||
| + | ...(este falla porque nadie escucha en 127.0.0.1) | ||
| - | (este falla porque nadie escucha en 127.0.0.1) | + | O puedes incluso mapear un par '' |
| - | + | ||
| - | O puedes incluso mapear un par '' | + | |
| <code bash> | <code bash> | ||
| - | curl --connect-to | + | curl --connect-to |
| - | http://httpbingo.org:8080/get | + | http://texto-plano.xyz:443/ |
| </ | </ | ||
| Línea 333: | Línea 357: | ||
| <code bash> | <code bash> | ||
| - | |||
| - | |||
| (este falla) | (este falla) | ||
| Línea 340: | Línea 362: | ||
| <code bash> | <code bash> | ||
| - | |||
| - | |||
| (este funciona bien) | (este funciona bien) | ||
| - | ===Credentiales=== | + | ===Credenciales=== |
| - | Casi nunca querrás pasar nombre de usuario y contraseña en el comando de curl en s{i. Una forma de evitarlo es usar el fichero '' | + | Casi nunca querrás pasar nombre de usuario y contraseña en el comando de curl en sí. Una forma de evitarlo es usar el fichero '' |
| < | < | ||
| Línea 360: | Línea 380: | ||
| Pasa la opción '' | Pasa la opción '' | ||
| - | <code bash> | + | <code bash> |
| curl --netrc-file /tmp/netrc | curl --netrc-file /tmp/netrc | ||
| - | http:// | + | http:// |
| </ | </ | ||
| + | |||
| + | ====Estados de Salida==== | ||
| + | |||
| + | Cuando curl finaliza (" | ||
| + | |||
| + | Por ejemplo, aquí hay un //exit status 7// (" | ||
| + | <code bash> | ||
| + | curl http:// | ||
| + | </ | ||
| + | |||
| + | Puede acceder al status de salida a través de la variable de intérprete '' | ||
| + | |||
| + | ===HTTP=== | ||
| + | |||
| + | Principalmente, | ||
| + | |||
| + | HTTP/1.x es un protocolo de texto plano que describe la comunicación entre el [[cliente]] y el [[servidor ]]. El cliente envía mensajes como este: | ||
| + | |||
| + | <code html> | ||
| + | POST / | ||
| + | host: texto-plano.xyz | ||
| + | content-type: | ||
| + | user-agent: curl/7.87.0 | ||
| + | |||
| + | { | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | * La primer línea es una //línea de solicitud// | ||
| + | * Las líneas siguientes (hasta la línea en blanco) son encabezados. Cada envabzado tiene un par // | ||
| + | * Finalmente, estos son los datos que el cliente envía al servidor. | ||
| + | |||
| + | En respuesta a esto, el cliente recibirá un mensaje como este: | ||
| + | |||
| + | <code html> | ||
| + | HTTP/1.1 200 OK | ||
| + | date: Mon, 28 Aug 2023 07:51:49 GMT | ||
| + | content-type: | ||
| + | |||
| + | { | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | * La primer línea es la //línea de status//. La versión ('' | ||
| + | * Las siguientes líneas (hasta la línea en blanco) son encabezados. Al igual que los encabezados de solicitud, estos dan información útil sobre la respuesta del cliente. | ||
| + | * Finalmente, va la información real que el servidor envía al cliente. | ||
| + | |||
| + | El protocolo HTTP carece de estado, por lo cual cualquier estado deberá estar contenido dentro de la solicitud en sí (ya sea en el encabezado o en el cuerpo). | ||
| + | |||
| + | ===HTTP/ | ||
| + | HTTP/2, es el sucesor de HTTP/1.1, y en realidad es un protocolo binario. Sin embargo, curl presenta los mensajes de HTTP/2 en texto plano (al igual que en HTTP/1.1), así que para propósitos de uso de curl, podemos ignorar este hecho. | ||
| + | |||
| + | |||
| + | ==Método HTTP== | ||
| + | |||
| + | Curl soporta todos los métodos HTTP (a menudos referidos como // | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code bash> | ||
| + | curl http:// | ||
| + | </ | ||
| + | |||
| + | '' | ||
| + | |||
| + | <code bash> | ||
| + | curl -I http:// | ||
| + | </ | ||
| + | |||
| + | POST ('' | ||
| + | |||
| + | <code bash> | ||
| + | curl -d " | ||
| + | </ | ||
| + | |||
| + | O cualquier otro método con '' | ||
| + | <code bash> | ||
| + | curl -X PATCH -d " | ||
| + | </ | ||
| + | |||
| + | ===Código de Respuesta=== | ||
| + | |||
| + | Típicamente, | ||
| + | |||
| + | <code bash> | ||
| + | curl http:// | ||
| + | </ | ||
| + | |||
| + | Para hacer que curl trate los códigos 4xx y 5xx como errores, use '' | ||
| + | |||
| + | <code bash> | ||
| + | curl -f http:// | ||
| + | </ | ||
| + | |||
| + | Para presentar el código de respuesta, use '' | ||
| + | |||
| + | <code bash> | ||
| + | curl -w " | ||
| + | </ | ||
| + | |||
| + | ==Encabezados de Respuesta== | ||
| + | |||
| + | Para presentar los encabezados de respuesta, use '' | ||
| + | |||
| + | <code bash> | ||
| + | curl -i http:// | ||
| + | </ | ||
| + | |||
| + | O guárdelos en un fichero usando '' | ||
| + | |||
| + | <code bash> | ||
| + | curl -D / | ||
| + | |||
| + | && cat / | ||
| + | </ | ||
| + | |||
| + | ==Cuerpo de Respuesta== | ||
| + | |||
| + | Lo que devuelve por defecto curl es el //cuerpo de respuesta//, | ||
| + | |||
| + | <code bash> | ||
| + | curl http:// | ||
| + | </ | ||
| + | |||
| + | Puede solicitar al servidor comprimir los datos por medio de '' | ||
| + | |||
| + | <code bash> | ||
| + | curl --compressed http:// | ||
| + | </ | ||
| + | |||
| + | (note como el encabezado de solicitud // | ||
| + | |||
| + | ==Rangos== | ||
| + | |||
| + | Para solicitar al servidor una sección de los datos en lugar del todo el entero, se usa la opción '' | ||
| + | |||
| + | Por ejemplo, para solicitar 50 bytes de datos a partir del 100° byte: | ||
| + | |||
| + | <code bash> | ||
| + | curl --range 100-150 http:// | ||
| + | </ | ||
| + | |||
| + | Tenga presente que el server __puede ignorar__ un pedido delimitado, y devolver la respuesta entera y completa (dependiendo de su propia configuración de seguridad). | ||
| + | |||
| + | Si está descargando datos de un servidor, también puede usar '' | ||
| + | |||
| + | <code bash> | ||
| + | curl --continue-at 1000 http:// | ||
| + | </ | ||
| + | |||
| + | ===Versiones HTTP=== | ||
| + | |||
| + | Por defecto, curl usa HTTP/1.1 para el esquema de transmisión http, y HTTP/2 para https. Se puede cambiar esto con modificadores: | ||
| + | |||
| + | <code bash> | ||
| + | curl --http0.9 | ||
| + | curl --http1.0 | ||
| + | curl --http1.1 | ||
| + | curl --http2 | ||
| + | curl --http3 | ||
| + | </ | ||
| + | |||
| + | Para saber qué versión de HTTP soporta el server, use la variable de respuesta '' | ||
| + | <code bash> | ||
| + | curl -w " | ||
| + | </ | ||
| + | |||
| + | ====Solicitudes Condicionales==== | ||
| + | |||
| + | Las solicitudes condicionales son útiles cuando queremos evitar descargar datos ya descargados (asumiendo que la transmisión no está detenida). Curl soporta dos condiciones distintas: etiquetado de hora de fichero ("file timestamp" | ||
| + | |||
| + | Para condiciones de Timestamp use '' | ||
| + | |||
| + | Descargar datos sólo si el recurso remoto es más nuevo (la condición se retiene): | ||
| + | |||
| + | <code bash> | ||
| + | curl --time-cond "Aug 30, 2023" http:// | ||
| + | </ | ||
| + | |||
| + | ...o mas viejo (la condición falla): | ||
| + | |||
| + | <code bash> | ||
| + | curl -i --time-cond "-Aug 30, 2023" http:// | ||
| + | </ | ||
| + | |||
| + | Las condiciones Etag son un poco mas completas. Un etag es un valor devuelto por el servidor que identifica unívocamente la versión actual del recurso solicitado. A menudo es un hash de los datos. | ||
| + | |||
| + | Para revisar un etag, curl debe primero guardarlo con '' | ||
| + | |||
| + | <code bash> | ||
| + | curl --etag-save /tmp/etags http:// | ||
| + | </ | ||
| + | |||
| + | ...y usar '' | ||
| + | |||
| + | <code bash> | ||
| + | curl --etag-save /tmp/etags -o /dev/null http:// | ||
| + | |||
| + | curl -i --etag-compare /tmp/etags http:// | ||
| + | </ | ||
| + | |||
| + | >Las condiciones Timestamp confían en el encabezado de respuesta Last-Modified (" | ||
| + | |||
| + | ===Envío HTTP=== | ||
| + | |||
| + | '' | ||
| + | |||
| + | Puede usar '' | ||
| + | |||
| + | <code bash> | ||
| + | curl -d name=fulana -d edad=25 http:// | ||
| + | </ | ||
| + | |||
| + | |||
| + | Para enviar datos desde un fichero, usamos '' | ||
| + | |||
| + | <code bash> | ||
| + | echo " | ||
| + | |||
| + | curl -d @/ | ||
| + | http:// | ||
| + | </ | ||
| + | |||
| + | |||
| + | '' | ||
| + | |||
| + | Para enviar datos JSON, usamos '' | ||
| + | |||
| + | <code bash> | ||
| + | curl --json ' | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==Solicitudes JSON== | ||
| + | Usamos '' | ||
| + | |||
| + | Para condificar datos de URL-encode (escapar todos los símbolos no permitidos en las URLs), use el '' | ||
| + | |||
| + | <code bash> | ||
| + | curl --data-urlencode " | ||
| + | </ | ||
| + | |||
| + | ==Envío de formularios multiparte== | ||
| + | |||
| + | '' | ||
| + | |||
| + | Cada parte tiene un nombre, encabezados, | ||
| + | |||
| + | < | ||
| + | --------------------------d74496d66958873e | ||
| + | Content-Disposition: | ||
| + | |||
| + | Anónimo | ||
| + | --------------------------d74496d66958873e | ||
| + | Content-Disposition: | ||
| + | Content-Type: | ||
| + | |||
| + | contenidos del fichero | ||
| + | --------------------------d74496d66958873e-- | ||
| + | </ | ||
| + | |||
| + | Para construir estas solicitudes multipartes con curl, usamos '' | ||
| + | |||
| + | <code bash> | ||
| + | touch / | ||
| + | |||
| + | curl -F nombre=Fulana -F edad=25 -F foto=@/ | ||
| + | http:// | ||
| + | </ | ||
| + | |||
| + | ===Redirecciones=== | ||
| + | |||
| + | Una redirección sucede cuando el servidor, en lugar de devolver el recurso solicitado, le dice al cliente que el recurso está localizado en otro lado (como se indica en el encabezado de Locación). La redirección siempre tiene un código de respuesta '' | ||
| + | |||
| + | Por defecto, Curl no sigue el redireccionamiento, | ||
| + | |||
| + | <code bash> | ||
| + | curl -i http:// | ||
| + | </ | ||
| + | |||
| + | Para hacer que Curl sigua redirecciones, | ||
| + | |||
| + | <code bash> | ||
| + | curl -L http:// | ||
| + | </ | ||
| + | |||
| + | Para protegerse contra redirecciones en bucle sinfín, use el limitador '' | ||
| + | |||
| + | <code bash> | ||
| + | curl -L --max-redirs 3 http:// | ||
| + | </ | ||
| + | |||
| + | ===HTTP PUT=== | ||
| + | |||
| + | A menudo se usa el método '' | ||
| + | |||
| + | <code bash> | ||
| + | echo "Hola Tercer Mundo!" | ||
| + | |||
| + | curl -T / | ||
| + | </ | ||
| + | |||
| + | En ocasiones, se utiliza '' | ||
| + | |||
| + | <code bash> | ||
| + | curl -X PUT -H " | ||
| + | -d ' | ||
| + | http:// | ||
| + | </ | ||
| + | |||
| + | ==Cookies== | ||
| + | |||
| + | El protocolo HTTP carece de estado, y las cookies fueron concebidas como un método ingenioso para sortear esto, siguiendo este mecanismo general: | ||
| + | |||
| + | * El servidor desea asociar algún estado con la sesión del cliente. | ||
| + | * El servidor devuelve el estado en el encabezado de respueta Set-Cookie. | ||
| + | * El cliente reconoce las cookies y las envía de vuelta con cada solicitud incorporada al encabezado de solicitud de la cookie. | ||
| + | |||
| + | Cada cookie tiene una fecha de vencimiento - ya sea explífita o una de "fin de sesión" | ||
| + | |||
| + | Por defecto, Curl ignora las cookies. Para activarlas, use la opción '' | ||
| + | |||
| + | >Aunque su reputación ha sido ensuciada por los infames " | ||
| + | |||
| + | Aquí el servidor establece la //sessionid de cookie// al valor '' | ||
| + | |||
| + | <code bash> | ||
| + | curl -b "" | ||
| + | http:// | ||
| + | |||
| + | && cat / | ||
| + | </ | ||
| + | |||
| + | ...Las llamadas subsecuentes con '' | ||
| + | |||
| + | Curl descarta automáticamente las cookies del jarro de cookies cuando superan su vencimiento | ||
| + | |||
| + | <code bash> | ||
| + | curl -j -b / | ||
| + | </ | ||
| + | |||
| + | ===Servicios alternativos=== | ||
| + | |||
| + | El encabezado de respuesta HTTP //Alt-Svc// indica que existe otra localización de red (un servicio alternativo) que el cliente podría utilizar para solicitudes futuras. | ||
| + | |||
| + | Para permitir los servicios alternativos, | ||
| + | |||
| + | <code bash> | ||
| + | curl --alt-svc / | ||
| + | http:// | ||
| + | |||
| + | && cat / | ||
| + | </ | ||
| + | |||
| + | ===Seguridad Estricta de Transporte HTTP=== | ||
| + | |||
| + | El encabezado de respuesta HTTP // | ||
| + | |||
| + | Para hacer que curl respete esta represión impuesta por el HSTS, use '' | ||
| + | |||
| + | <code bash> | ||
| + | curl --hsts /tmp/hsts -o /dev/null | ||
| + | http:// | ||
| + | |||
| + | && cat /tmp/hsts | ||
| + | </ | ||
| + | |||
| + | ====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 " | ||
| + | </ | ||
| + | |||
| + | |||
