Kötü bir bağlantı üzerinden büyük dosyaları indirmek için kullanılabilecek mevcut bir araç var mı?
Düzenli olarak küçük bir dosyayı indirmem gerekiyor: 300 MB, ancak yavaş (80-120 KBytes / sn) TCP bağlantısı 10-120 saniye sonra rasgele kesiliyor. (Bu büyük bir şirketin ağı. Yöneticileriyle (Hindistan'dan çalışarak) defalarca iletişim kurduk, ancak hiçbir şey yapamıyorlar ya da istemiyorlar.) Sorun ters vekilleri / yük dengeleyicileri ile ilgili olabilir.
Şimdiye kadar pcurl'nin değiştirilmiş bir versiyonunu kullandım: https://github.com/brunoborges/pcurl
Bu satırı değiştirdim:
curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
buna:
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} &
Eklemek zorunda kaldım, --speed-limit 2048 --speed-time 10
çünkü bağlantı çoğunlukla başarısız olduğunda dakikalarca kilitleniyor.
Ancak son zamanlarda bu senaryo bile tamamlanamıyor.
Bir sorun, -C -
parçayı görmezden geldiği görülüyor , bu yüzden yeniden denemeden sonra segmenti "devam ettirmiyor". İlgili geçici dosyayı kısaltıyor ve her başarısızlıktan sonra baştan başlıyor gibi görünüyor. (Bence --range
ve -C
seçenekler birlikte kullanılamaz)
Diğer problem, bu betiğin tüm segmentleri aynı anda indirmesidir. Bir seferde yalnızca 10 tanesi indirilen 300 adet kesime sahip olamaz.
Bu amaç için bir indirme aracı C # dilinde yazmayı düşünüyordum, ancak mevcut bir araç varsa veya curl komutu farklı parametrelerle düzgün çalışabiliyorsa biraz zaman ayırabilirim.
GÜNCELLEME 1: Ek bilgi: Paralel indirme işlevi kaldırılmamalıdır, çünkü her bağlantı için bir bant genişliği sınırı vardır (80-120 Kbyte / sn, çoğunlukla 80), bu nedenle 10 bağlantı 10 kez hızlanmaya neden olabilir. Dosya indirmeyi 1 saat içinde bitirmeliyim, çünkü dosya saatlik üretiliyor.
rsync
(transferleri yeniden başlatmanıza izin verecek)?lftp
ayrıca otomatik olarak aktarımların yeniden başlatılmasını sağlar.