Если вы хотите использовать urllib и urlretrieve, создайте подкласс urllib.URLopener
и используйте его метод addheader()
для настройки заголовков (т.е.: addheader('Accept', 'sound/basic')
, который я извлекаю из строки документации для urllib.addheader).
Чтобы установить URLopener для использования urllib, см. Пример в разделе urllib._urlopener документации (обратите внимание на подчеркивание):
import urllib
class MyURLopener(urllib.URLopener):
pass # your override here, perhaps to __init__
urllib._urlopener = MyURLopener
Однако, вам будет приятно услышать ваш комментарий к комментариям к вопросу, чтение пустой строки из read()
действительно является сигналом к остановке. Вот как urlretrieve обрабатывает, например, когда остановиться. TCP / IP и сокеты абстрагируют процесс чтения, блокируя ожидание дополнительных данных, если соединение на другом конце не является EOF и не закрыто, и в этом случае read () из соединения возвращает пустую строку. Пустая строка означает, что данные не поступают ... вам не нужно беспокоиться об упорядоченной сборке пакетов, поскольку все это было обработано за вас. Если вы беспокоитесь за urllib2, я думаю, вы можете безопасно использовать его.