curl - Descargar y enviar datos por HTTP

Mantenido el

El comando curl se comunica con servidores web mediante HTTP y HTTPS desde el Símbolo del sistema. Permite descargar páginas web y archivos, llamar a APIs web y comprobar códigos de estado HTTP sin usar un navegador.

curl.exe viene incluido en Windows 10 versión 1803 y posteriores, y en Windows 11, por lo que puedes usarlo sin instalar nada.

Sintaxis básica de curl

curl [opciones] URL

Si solo indicas una URL, curl muestra en la consola, tal cual, lo que devuelve el servidor.

curl https://example.com
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>curl https://example.com
<!doctype html>
<html>
…
C:\users\user>
Comprobar si curl está disponible

Al ejecutar where curl se muestra una ruta como C:\Windows\System32\curl.exe, y curl --version muestra la versión. Si no se encuentra, es posible que tengas una versión anterior a Windows 10 1803. Si tienes instalado Git for Windows u otro software similar, puede aparecer primero otro curl. Para where, consulta

.

En PowerShell, escribe curl.exe

En Windows PowerShell 5.1, curl es un alias del cmdlet Invoke-WebRequest, y tanto las opciones como los resultados difieren de este artículo. PowerShell 7 y posteriores ya no tienen este alias, pero escribir curl.exe con la extensión ejecuta el curl real en cualquier versión. Las reglas de comillas también son distintas en PowerShell. El Símbolo del sistema no tiene este problema.

Guardar en un archivo (-o / -O)

Para guardar el contenido descargado en un archivo, indica el destino con -o.

curl -o page.html https://example.com

Para reutilizar el nombre de archivo del final de la URL, usa -O en mayúscula.

curl -O https://example.com/files/report.pdf

En este ejemplo, report.pdf se guarda en el directorio actual. Consulta también

para comprobar cuál es.

Los archivos existentes se sobrescriben sin confirmación

Al guardar con -o o -O, si ya existe un archivo con el mismo nombre se sobrescribe sin aviso. Si lo ejecutas en una carpeta con archivos importantes, indica explícitamente la ruta de destino.

Seguir redirecciones (-L)

Las URL cortas y las de descarga a veces redirigen a otra URL. Por defecto curl no sigue la redirección, así que añade -L para obtener el destino final.

curl -L -o setup.zip https://example.com/download/latest

Ajustar el progreso y los errores (-s / -S / -f)

curl muestra un medidor de progreso durante la descarga. Para mantener limpio el registro de un archivo por lotes, combina las siguientes opciones.

OpciónDescripción
-sOculta el medidor de progreso y los mensajes de error (silencioso)
-SUsada con -s, muestra un mensaje solo cuando ocurre un error
-fAnte errores HTTP como 404 o 500, termina con error en lugar de guardar el cuerpo de respuesta

Sin -f, una página de error 404 (una página HTML que describe el error) se guarda en el archivo como si la descarga hubiera tenido éxito. La combinación -fsSL se usa mucho en scripts.

curl -fsSL -o setup.zip https://example.com/download/latest

Comprobar solo los encabezados HTTP (-I)

Con -I, curl no obtiene el cuerpo y muestra solo los encabezados HTTP (estado, fecha de modificación, etc.).

curl -I https://example.com
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>curl -I https://example.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1256
…
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

Puedes comprobar si un sitio responde y qué tamaño tiene un archivo sin descargarlo. La salida varía según el servidor.

Llamar a una API web (-H / -d / -X)

GET con un encabezado (-H)

-H añade cualquier encabezado HTTP. Se usa, por ejemplo, para enviar un token de API.

curl -H "Authorization: Bearer %API_TOKEN%" https://api.example.com/v1/items

Escribir el token directamente en el comando puede filtrarlo a través del historial de comandos o al compartir pantalla. Se recomienda guardarlo en una variable de entorno y referenciarlo, como en este ejemplo. Para las variables de entorno, consulta

.

Enviar datos con POST (-d)

Al indicar datos con -d, el método pasa a ser POST automáticamente. Para enviar JSON, añade también un encabezado Content-Type.

curl -X POST -H "Content-Type: application/json" -d "{\"name\":\"sample\",\"count\":3}" https://api.example.com/v1/items

En el Símbolo del sistema, solo las comillas dobles " pueden delimitar una cadena, por lo que las comillas dobles dentro del JSON se escapan como \".

Si el JSON es largo, guárdalo en un archivo y cárgalo con @nombre_de_archivo. Así evitas el trabajo de escapar y los errores de escritura.

curl -X POST -H "Content-Type: application/json" -d @data.json https://api.example.com/v1/items
`-X POST` se puede omitir

Al indicar -d, el método ya es POST, así que -X POST se puede omitir. Úsalo para otros métodos, como -X PUT o -X DELETE.

Pasa como archivo el JSON con caracteres no ASCII

Si escribes directamente en el Símbolo del sistema caracteres no ASCII, como japonés, pueden enviarse con la codificación corrupta por la página de códigos. Para datos con esos caracteres, guárdalos como UTF-8 y pásalos con -d @data.json. Consulta

para más detalles.

Obtener el código de estado HTTP (-w)

-w (write-out) muestra información sobre la transferencia. %{http_code} es el código de estado HTTP.

curl -s -o NUL -w "%{http_code}" https://example.com
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>curl -s -o NUL -w "%{http_code}" https://example.com
200
C:\users\user>

-o NUL descarta el cuerpo (NUL es un nombre de dispositivo especial que descarta todo lo que se escribe en él).

Duplica el % en los archivos por lotes

En un archivo por lotes, % tiene un significado especial, por lo que -w "%{http_code}" debe escribirse como -w "%%{http_code}". Al escribir directamente en el Símbolo del sistema, basta con un solo %.

Configurar tiempos de espera y reintentos

En una red inestable, fijar un tiempo de espera y un número de reintentos evita que el proceso se quede bloqueado.

OpciónDescripción
--max-time segundosLímite de tiempo de toda la operación
--connect-timeout segundosLímite de tiempo para establecer la conexión
--retry cantidadNúmero de reintentos ante errores transitorios
curl -fsSL --connect-timeout 10 --max-time 60 --retry 3 -o setup.zip https://example.com/download/latest

Ejemplo: comprobar si la descarga tuvo éxito

curl devuelve el código de salida 0 si tiene éxito y uno distinto de 0 si falla. Combinado con -f, también los errores HTTP como 404 se tratan como fallos.

@echo off
setlocal

set "url=https://example.com/files/report.pdf"
set "dest=%USERPROFILE%\Downloads\report.pdf"

curl -fsSL --retry 3 -o "%dest%" "%url%"
if errorlevel 1 (
    echo La descarga ha fallado.
    exit /b 1
)

echo Descarga completada: "%dest%"
endlocal

Los códigos de salida se explican en

. Con -f, curl devuelve el código de salida 22 ante un error HTTP.

Pon entre comillas las URL que contengan &

Si una URL contiene &, como en ?a=1&b=2, el Símbolo del sistema interpreta & como separador de comandos. Encierra siempre la URL entre comillas dobles. En un archivo por lotes, una secuencia con codificación porcentual como %20 en la URL debe escribirse como %%20.

Sobre -k, que ignora los errores de certificado

-k omite la verificación del certificado HTTPS, pero entonces no te darás cuenta si la comunicación es interceptada o manipulada. Úsalo solo si entiendes el riesgo, por ejemplo en un entorno de pruebas interno, y normalmente no lo añadas.

Resumen

ObjetivoEjemplo
Mostrar el contenido en pantallacurl URL
Guardar con un nombre indicadocurl -o nombre URL
Guardar con el nombre de la URLcurl -O URL
Seguir redireccionescurl -L URL
Comprobar solo los encabezadoscurl -I URL
Enviar JSONcurl -H "Content-Type: application/json" -d "..." URL
Obtener el código de estadocurl -s -o NUL -w "%{http_code}" URL

Artículos relacionados

Preguntas de práctica

Problema de práctica

¿Qué opción debes añadir para seguir una URL con redirección, como una URL corta, y obtener su destino?

回答がサーバーに送信されることはありません
Problema de práctica

¿Qué opción hace que curl termine con error en lugar de guardar la página de error ante una respuesta HTTP de error como 404?

回答がサーバーに送信されることはありません
#Símbolo del sistema #Archivos por lotes #Línea de comandos #Comando #curl #Red #Descarga