Как я могу загрузить файл в Python3 с помощью urlopen() или добавить пользовательские заголовки в urlretrieve()?
Я хочу сделать скачать файл с сервера, который позволяет только определенные User-Agents
, Мне удалось получить 200 OK
с сайта, используя следующий код:
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Interwebs Exploiter 4')]
opener.open(url)
Поскольку файл может быть в формате.pdf или.zip или в другом формате, я хочу загрузить его без разбора или чтения. Urlretrieve()
кажется хорошей идеей, но он использует заголовок по умолчанию, который заставляет сервер возвращать 403 Forbidden
,
Как я могу либо загрузить файл с помощью этого пользовательского встроенного открывателя, либо просто добавить заголовки в urlretrieve()
?
И этот пример в Python Docs для меня полный бред.
2 ответа
Я хотел бы использовать requests
для этого:
import requests
headers = {'User-Agent': 'Interwebs Exploiter 4'}
r = requests.get(url, allow_redirects=True, headers=headers)
with open(filename, 'wb') as f:
for chunk in r.iter_content(1024):
f.write(chunk)
Если это не является абсолютно необходимым по какой-либо причине использовать urllib
Загрузите URL-адрес с
urllib.request
:
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Interwebs Exploiter 4')]
with opener.open(url) as url_file:
url_content = url_file.read()
Обратите внимание, что
url_file.read()
прочитает весь файл в память, что может быть не то, что вам нужно, если это может быть очень большой файл.