Existe uma ferramenta existente, que pode ser usada para baixar arquivos grandes em uma conexão ruim?
Eu tenho que baixar regularmente um arquivo relativamente pequeno: 300 MB, mas a conexão TCP lenta (80-120 KBytes / s) interrompe aleatoriamente após 10-120 segundos. (É uma rede de uma grande empresa. Entramos em contato com os administradores (trabalhando na Índia) várias vezes, mas eles não podem ou não querem fazer nada.) O problema pode estar nos proxies reversos / balanceadores de carga.
Até agora, usei uma versão modificada do pcurl: https://github.com/brunoborges/pcurl
Eu mudei esta linha:
curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
para isso:
curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
--retry-max-time 0 -C - --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
Eu tive que adicionar --speed-limit 2048 --speed-time 10
porque a conexão geralmente trava por alguns minutos quando falha.
Mas recentemente, mesmo esse script não pode ser concluído.
Um problema é que ele parece ignorar a -C -
peça e, portanto, não "continua" o segmento após uma nova tentativa. Parece truncar o arquivo temporário relacionado e começar do início após cada falha. (Acho que o --range
e as -C
opções não podem ser utilizados em conjunto.)
O outro problema é que esse script baixa todos os segmentos ao mesmo tempo. Ele não pode ter 300 segmentos, dos quais apenas 10 estão sendo baixados por vez.
Eu estava pensando em escrever uma ferramenta de download em C # para esse fim específico, mas se houver uma ferramenta existente ou se o comando curl funcionar adequadamente com parâmetros diferentes, eu poderia poupar algum tempo.
ATUALIZAÇÃO 1: Informações adicionais: A funcionalidade de download paralelo não deve ser removida, porque eles têm um limite de largura de banda (80-120 Kbytes / s, principalmente 80) por conexão, portanto, 10 conexões podem causar uma aceleração de 10 vezes. Eu tenho que terminar o download do arquivo em 1 hora, porque o arquivo é gerado a cada hora.
rsync
(o que permitirá que você reinicie as transferências)?lftp
também permite reiniciar automaticamente as transmissões.