Как открыть сайт с urllib через прокси на 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)
4 ответов:
По умолчанию
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)Edit: Если я правильно понимаю ваши комментарии, вы хотите попробовать несколько прокси-серверов и распечатать каждый прокси-сервер по мере его использования. Как насчет чего-то вроде этого?
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)
Python 3 здесь немного отличается. Он попытается автоматически определить настройки прокси, но если вам нужны специальные или ручные настройки прокси, подумайте о таком коде:
#!/usr/bin/env python3 import urllib.request proxy_support = urllib.request.ProxyHandler({'http' : 'http://user:pass@server: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 docs
Вот пример руководства по использованию 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/') """
Для 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:password@proxy-source-ip:proxy-port', 'https':'https://username:password@proxy-source-ip:proxy-port'}Примечание: избегайте использования специальных символов, таких как
:,@в имени пользователя и паролях
Comments