Ниже приведен фрагмент кода, как это сделать с библиотекой requests
ОТКАЗ
Этот пример был сделан с requests
, сторонней библиотекой Python и , а не с PyQt, как изначально предполагалось для asker.
import requests
import shutil
def download(url):
# gets the filename from the url, and
# creates the download file absolute path
filename = url.split("/")[-1]
path = "downloads/" + filename
# Defines relevant proxies, see `requests` docs
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
# Add proxies, and leave `stream=True` for file downloads
r = requests.get(url, stream=True, proxies=proxies)
if r.status_code == 200:
with open(path, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
else:
# Manually raise if status code is anything other than 200
r.raise_for_status()
download('http://test.com/somefile.avi')
Edit:
pac
файлы не работают "из коробки" ни с одной из распространенных библиотек веб-запросов python, однако пользователь SO @CarsonLam предоставил ответ здесь , который пытается решить эту проблему.
Библиотека pypac
предоставляет поддержку для этого, и, поскольку она наследует от requests
объектов, она будет работать с нашим существующим кодом. Некоторые дополнительные примеры можно найти здесь здесь .
С pac-файлом прокси, я думаю, что-то вроде этого было бы подходящим способом;
from pypac import PACSession, get_pac
import shutil
def download(url):
# gets the filename from the url, and
# creates the download file absolute path
filename = url.split("/")[-1]
path = "downloads/" + filename
# looks for a pac file at the specified url, and creates a session
# this session inherits from requests.Session
pac = get_pac(url='http://foo.corp.local/proxy.pac')
session = PACSession(pac)
# Add proxies, and leave `stream=True` for file downloads
session = requests.get(url, stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
else:
# Manually raise if status code is anython other than 200
r.raise_for_status()