progreso precios precio datos curiosos corchito curl

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.