Есть ли способ загрузить определенные части файла по ссылке? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть файл размером приблизительно 8 ГБ, который я пытаюсь загрузить, расположенный здесь: www.cs.jhu.edu/~anni/ALNC/030314corpus.splittoklc.tgz

Однако сервер закрывает мое соединение каждые несколько секунд, позволяя мне загружать только 50-90 МБ файла на моей скорости соединения. Я поменялся IP-адресами тоже, но получаю такое же поведение. Это также случается для всех остальных?

Вот вывод, который я получаю от wget

enter image description here

Мне интересно, могу ли я сбросить соединение, как wget сделал автоматически первые несколько раз? сейчас он просто замерзает через некоторое время.

В качестве альтернативы, есть ли способ собрать различные части файла с помощью wget или пакета requests Python или другого языка?


UPDATE:

Я попробовал это на своем телефоне, и, кажется, он работает, хотя и очень медленно. Есть идеи, почему это может происходить и как это решить?

UPDATE:

Со временем телефонное соединение также сбрасывается, и, так как файл очень большой, я не смог приблизиться к завершению.

1 Ответ

1 голос
/ 20 мая 2019

Отборочные

Чтобы все это работало, сервер должен поддерживать запросы диапазона, на которые он будет отвечать 206 Partial Content. Судя по выводу вашего терминала, рассматриваемый сервер имеет поддержку.

Ваши вопросы

Однако сервер закрывает мое соединение каждые несколько секунд, позволяя мне загружать только 50-90 МБ файла на моей скорости соединения. Я поменялся IP-адресами тоже, но получаю такое же поведение. Это также случается для всех остальных?

Нет, загрузка работает без особых проблем для меня. Я тестировал с

curl www.cs.jhu.edu/~anni/ALNC/030314corpus.splittoklc.tgz > /dev/null

Мне интересно, могу ли я сбросить соединение, как wget сделал автоматически первые несколько раз?

Кажется, wget автоматически повторил попытку загрузки. Из вывода терминала, который вы включили, кажется, что wget в конечном итоге «доберется». Вы можете заставить wget продолжить загрузку неполной загрузки, используя wget --continue [URL].

В качестве альтернативы, есть ли способ собрать разные части файла с помощью wget или пакета запросов Python или другого языка?

Начиная с wget 1.16, вы можете использовать wget --start-pos 500 [URL], чтобы начать загрузку с заданной позиции.

Вы также можете использовать curl -r 500-1000 [URL] для загрузки байтов в заданном диапазоне.

Для модуля Python requests согласно этого SO ответа :

import requests

headers = {"Range": "bytes=0-100"}
r = requests.get("https://example.com/link", headers=headers)

Ключевые слова для дополнительной информации

Ключевыми словами здесь для вашего дальнейшего поиска должны быть «запрос диапазона», «частичная загрузка», «206».

...