Как открыть веб-сайт с помощью urllib через proxy в Python?
У меня есть эта программа, которая проверяет веб-сайт, и я хочу знать, как я могу проверить его через прокси-сервер в Python...
это код, например,
while True:
try:
h = urllib.urlopen(website)
break
except:
print '['+time.strftime('%Y/%m/%d %H:%M:%S')+'] '+'ERROR. Trying again in a few seconds...'
time.sleep(5)
Ответы
Ответ 1
По умолчанию urlopen
использует переменную среды http_proxy
, чтобы определить, какой HTTP-прокси использовать:
$ export http_proxy='http://myproxy.example.com:1234'
$ python myscript.py # Using http://myproxy.example.com:1234 as a proxy
Если вы хотите указать прокси-сервер внутри приложения, вы можете дать аргументу proxies
urlopen
:
proxies = {'http': 'http://myproxy.example.com:1234'}
print "Using HTTP proxy %s" % proxies['http']
urllib.urlopen("http://www.google.com", proxies=proxies)
Изменить: Если я правильно понимаю ваши комментарии, вы хотите попробовать несколько прокси и напечатать каждый прокси-сервер при его попытке. Как насчет чего-то подобного?
candidate_proxies = ['http://proxy1.example.com:1234',
'http://proxy2.example.com:1234',
'http://proxy3.example.com:1234']
for proxy in candidate_proxies:
print "Trying HTTP proxy %s" % proxy
try:
result = urllib.urlopen("http://www.google.com", proxies={'http': proxy})
print "Got URL using proxy %s" % proxy
break
except:
print "Trying next proxy in 5 seconds"
time.sleep(5)
Ответ 2
Python 3 здесь немного отличается. Он попытается автоматически определить настройки прокси-сервера, но если вам нужны конкретные или ручные настройки прокси-сервера, подумайте об этом виде кода:
#!/usr/bin/env python3
import urllib.request
proxy_support = urllib.request.ProxyHandler({'http' : 'http://user:[email protected]:port',
'https': 'https://...'})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
with urllib.request.urlopen(url) as response:
# ... implement things such as 'html = response.read()'
Обратитесь также к к соответствующему разделу в документах Python 3
Ответ 3
Вот пример кода, как использовать urllib для подключения через прокси:
authinfo = urllib.request.HTTPBasicAuthHandler()
proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"})
# build a new opener that adds authentication and caching FTP handlers
opener = urllib.request.build_opener(proxy_support, authinfo,
urllib.request.CacheFTPHandler)
# install it
urllib.request.install_opener(opener)
f = urllib.request.urlopen('http://www.google.com/')
"""
Ответ 4
Для http и https используйте:
proxies = {'http':'http://proxy-source-ip:proxy-port',
'https':'https://proxy-source-ip:proxy-port'}
может быть добавлено больше прокси-серверов
proxies = {'http':'http://proxy1-source-ip:proxy-port',
'http':'http://proxy2-source-ip:proxy-port'
...
}
Использование
filehandle = urllib.urlopen( external_url , proxies=proxies)
Не используйте прокси (в случае ссылок внутри сети)
filehandle = urllib.urlopen(external_url, proxies={})
Использовать проверку подлинности через прокси через имя пользователя и пароль
proxies = {'http':'http://username:[email protected]:proxy-port',
'https':'https://username:[email protected]:proxy-port'}
Примечание: избегайте использования специальных символов, таких как :,@
в имени пользователя и паролях