2008-11-07 4 views
4

При использовании urllib2 (и, возможно, urllib) на windows python, похоже, волшебным образом подбирает параметр аутентифицированного прокси-сервера, применяемый к InternetExplorer. Однако, похоже, он не проверяет и не обрабатывает список «Исключения» в Advance.Как я могу применить аутентифицированные прокси-исключения к открывателю с помощью urllib2?

Есть ли способ заставить его обработать список исключений? Или, проигнорируйте настройку прокси-сервера IE и примените мой собственный прокси-механизм для решения этой проблемы?

Я играл с созданием прокси-новичка раньше, но не смог заставить его работать. Вот что мне удалось откопать, но я до сих пор не понимаю, как/где применяются какие-либо исключения, и я даже не уверен, если это правильно:

proxy_info = { 
         'host':'myproxy.com', 
         'user':Username, 
         'pass':Password, 
         'port':1080 
         }             

http_str = "http://%(user)s:%(pass)[email protected]%(host)s:%(port)d" % proxy_info 

authInfo = urllib2.HTTPBasicAuthHandler() 
authInfo.add_password() 
proxy_dict = {'http':http_str} 
proxyHandler = urllib2.ProxyHandler(proxy_dict) 

# apply the handler to an opener 
proxy_opener = urllib2.build_opener(proxyHandler, urllib2.HTTPHandler) 

urllib2.install_opener(proxy_opener) 

ответ

2

По умолчанию urllib2 получает параметры прокси-сервера из переменная среды, поэтому она использует настройки IE. Это очень удобно, потому что вам не нужно самостоятельно настраивать аутентификацию.

Вы не можете применять исключения, как хотите, самым простым способом было бы иметь два opener s и решить, какой из них использовать в зависимости от того, находится ли домен в списке исключений или нет.

Использование по умолчанию opener, когда вы хотите использовать прокси-сервер, и один без прокси-сервера, когда вам не нужно это:

>>> no_proxy = urllib2.ProxyHandler({}) 
>>> opener = urllib2.build_opener(no_proxy) 
>>> urllib2.install_opener(opener) 

От here.

Edit:

Вот как я это сделать:

exclusion_list = ['http://www.google.com/', 'http://localhost/'] 

no_proxy = urllib2.ProxyHandler({}) 
no_proxy_opener = urllib2.build_opener(no_proxy) 

default_proxy_opener = urllib2.build_opener() 

url = 'http://www.example.com/' 

if url in exclusion_list: 
    opener = no_proxy_opener 
else: 
    opener = default_proxy_opener 

page = opener.open(url) 
print page 

Ваша самая большая проблема будет соответствие URL-адрес в список исключений, но это совершенно новый вопрос.

+0

Спасибо, я попробовал простую попытку/кроме случаев, когда появляется прокси-ошибка, затем создайте noproxy и установите его, как указано выше, и повторите попытку подключения. Но это не работает. Похоже, что часть входа моего скрипта терпит неудачу. Записывает ли это ранее установленные открыватели? С помощью обработчика файлов cookie. – monkut 2008-11-07 05:22:09