Как я могу применить аутентифицированные исключения прокси к открывателю, используя urllib2? - PullRequest
4 голосов
/ 07 ноября 2008

При использовании urllib2 (и, возможно, urllib) в Windows, Python, похоже, волшебным образом выбирает параметр прокси-сервера с проверкой подлинности, примененный к InternetExplorer. Однако кажется, что он не проверяет и не обрабатывает список «Исключения» в настройках Advance.

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

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

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

http_str = "http://%(user)s:%(pass)s@%(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)

1 Ответ

2 голосов
/ 07 ноября 2008

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

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

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

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

С здесь .

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-адреса со списком исключений, но это совершенно новый вопрос.

...