curl - precios - el corchito progreso precio 2017
cURL: ¿Cómo mostrar la información de progreso durante la carga? (3)
Utilizo la siguiente sintaxis para subir archivos:
curl --form upload=@localfilename --form press=OK [URL]
Cómo mostrar el progreso? Gracias.
Esto es lo que uso en uno de mis scripts de compilación:
curl "${UPLOAD_URL}" /
--progress-bar /
--verbose /
-F build="${BUILD}" /
-F version="${VERSION}" /
-F ipa="@${IPA};type=application/octet-stream" /
-F assets="@-;type=text/xml" /
-F replace="${REPLACE}" /
-A "${CURL_FAKE_USER_AGENT}" /
<<< "${ASSETS}" /
| tee -a "${LOG_FILE}" ; test ${PIPESTATUS[0]} -eq 0
Las opciones -F
y -A
probablemente no le interesen, pero las partes útiles son:
curl "${UPLOAD_URL}" --progress-bar
que le dice a curl
que muestre una barra de progreso (en lugar del "contador de progreso" predeterminado) durante la carga, y:
| tee -a "${LOG_FILE}" ; test ${PIPESTATUS[0]} -eq 0
que agrega la salida del comando a un archivo de registro y también lo echo a stdout
. La test ${PIPESTATUS[0]} -eq 0
parte hace que el estado de salida de esta línea (que está en un script bash) sea el mismo código de salida que el comando curl
devuelto y no el estado de tee
comando tee
(necesario porque tee
es en realidad el último comando que se ejecuta en esta línea, no curl
).
Del man curl
:
PROGRESS METER
curl normally displays a progress meter during operations, indicating the amount of transferred data, transfer speeds and estimated time left, etc.
curl displays this data to the terminal by default, so if you invoke curl to do an operation and it is about to write data to the terminal, it disables the progress meter as otherwise it would mess up the
output mixing progress meter and response data.
If you want a progress meter for HTTP POST or PUT requests, you need to redirect the response output to a file, using shell redirect (>), -o [file] or similar.
It is not the same case for FTP upload as that operation does not spit out any response data to the terminal.
If you prefer a progress "bar" instead of the regular meter, -# is your friend.
OPTIONS
-#, --progress-bar
Make curl display progress as a simple progress bar instead of the standard, more informational, meter.
Todas las otras respuestas aquí tienen el problema de que requieren que escriba la salida original de curl en un archivo (log). Sin embargo, esto no puede ser deseado en todos los casos.
El problema es que Curl oculta la barra / medidor de progreso, cuando se espera una respuesta del servidor, que luego se escribe en sdout. Entonces, básicamente, puede redirigir la salida a un archivo para mostrar la barra nuevamente. Sin embargo, no queremos eso, así que /dev/null
y tee
pueden ayudarnos aquí:
curl --progress-bar -T "${SOME_LARGE_FILE}" "${UPLOAD_URL}" | tee /dev/null
La salida de Curl se pasa a tee
que escribe el resultado tanto en la consola (que queremos ver la barra de progreso como también en la respuesta del servidor) y en un archivo (que nosotros no necesitamos, pero como usamos /dev/null
this) no importa).
Tenga en cuenta que los desarrolladores de Curl por supuesto no ocultaron la barra de progreso por diversión. En este caso, es posible que no siempre vea el resultado del servidor o que solo se muestre durante unos segundos, pero si no le importa esto, la solución es buena.
Tuve problemas con la redirección de comandos de la respuesta aceptada y encontré que la opción -o
colocará la salida de respuesta en un archivo que permite que aparezca la barra de progreso.
curl --progress-bar /
-o upload.txt /
-H ${SOME_AUTH_HEADER} /
-T ${SOME_LARGE_FILE} /
"${UPLOAD_URL}"
Solo otra opción para obtener el resultado deseado.
NOTA : El énfasis en esta línea de la página man es importante para comprender la causa raíz de por qué la barra de progreso no se muestra cuando se especifica --progress-bar
.
If you want a progress meter for HTTP POST or PUT requests,
you need to redirect the response output to a file,
using shell redirect (>), -o [file] or similar.