Buy commercial curl support from WolfSSL. We help you work
out your issues, debug your libcurl applications, use the API, port to new
platforms, add new features and more. With a team lead by the curl founder
himself.
Re: Corrupted download when using the resume option?!
- Contemporary messages sorted: [ by date ] [ by thread ] [ by subject ] [ by author ] [ by messages with attachments ]
From: Ray Satiro via curl-users <curl-users_at_cool.haxx.se>
Date: Fri, 12 Feb 2021 00:14:53 -0500
On 2/10/2021 9:46 AM, Mihail Kostira via curl-users wrote:
> I'm using curl to download a 10mb file over a poor connection.
>
> I use the '-C -' option in a loop to resume the download if it breaks
> (see the snippet below).
>
> This works when I test locally and interrupt the download by exiting
> the shell script - after restarting the script, it will resume the
> download.
>
> However, in an IoT device in the field, midway through the transfer,
> curl errors out with "curl: (18) transfer closed with 2674439 bytes
> remaining to read". After that, the download is retried within the
> loop and completes - but the file is corrupt. This has happened
> multiple times (same device).
>
> Am I missing something, maybe I'm using an incompatible set of
> options? Or is it possible that the poor connection results in a
> corrupt transfer?
>
> downloadFileResume() {
> # $1 contains the URL to download
> local fileName=$(basename "$1")
> for (( i=0; i<=$numCurlRetries; i++ ))
> do
> # capture curl http code (-w %{http_code}) in stdout
> curlHttpCode=$(curl -kSLf -u "$REPO_USERNAME:$REPO_PASSWORD"
> -w %{http_code} -O -C - "$1")
> local res=$?
> [ $res -eq 0 ] && return
> # curl gives error when attempting to resume a completely
> downloaded file, it's a 416 error from the server
> [ $curlHttpCode -eq 416 ] && echo "Error 416, assuming file is
> downloaded completely" && return
> done
> echo "failed to download $fileName"
> return 1
> }
Maybe the server does not support file resume? How is it corrupted, did
you check the contents at the end?
-----------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-users
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2021-02-12
Date: Fri, 12 Feb 2021 00:14:53 -0500
On 2/10/2021 9:46 AM, Mihail Kostira via curl-users wrote:
> I'm using curl to download a 10mb file over a poor connection.
>
> I use the '-C -' option in a loop to resume the download if it breaks
> (see the snippet below).
>
> This works when I test locally and interrupt the download by exiting
> the shell script - after restarting the script, it will resume the
> download.
>
> However, in an IoT device in the field, midway through the transfer,
> curl errors out with "curl: (18) transfer closed with 2674439 bytes
> remaining to read". After that, the download is retried within the
> loop and completes - but the file is corrupt. This has happened
> multiple times (same device).
>
> Am I missing something, maybe I'm using an incompatible set of
> options? Or is it possible that the poor connection results in a
> corrupt transfer?
>
> downloadFileResume() {
> # $1 contains the URL to download
> local fileName=$(basename "$1")
> for (( i=0; i<=$numCurlRetries; i++ ))
> do
> # capture curl http code (-w %{http_code}) in stdout
> curlHttpCode=$(curl -kSLf -u "$REPO_USERNAME:$REPO_PASSWORD"
> -w %{http_code} -O -C - "$1")
> local res=$?
> [ $res -eq 0 ] && return
> # curl gives error when attempting to resume a completely
> downloaded file, it's a 416 error from the server
> [ $curlHttpCode -eq 416 ] && echo "Error 416, assuming file is
> downloaded completely" && return
> done
> echo "failed to download $fileName"
> return 1
> }
Maybe the server does not support file resume? How is it corrupted, did
you check the contents at the end?
-----------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-users
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2021-02-12