Как проигнорировать запрос “Введите имя пользователя для доступа к частному прокси”?
Вопрос
Я использую urllib.urlopen с некоторыми http-прокси и иногда (вероятно, когда им требуется авторизация) Я получаю следующее приглашение, напечатанное в консоли:
Enter username for Private Proxy Access (country) at xxx.xxx.xxx.xxx:xxxx
Как я могу вызвать исключение при возникновении такой вещи?
Вот такой пример:
from urllib import urlopen
p = '64.79.209.238:36867'
print urlopen('http://google.com', proxies={'http': 'http://'+p})
На случай, если упомянутый прокси-сервер умрет слишком рано, вот несколько замен 64.79.197.36:43444
, 64.79.209.203:34968
, 64.79.197.36:43444
, 209.59.207.197:3438
Решение
Вам нужно перезаписать FancyURLopener.prompt_user_passwd
способ:
class AuthorizationRequired(Exception):
pass
class MyURLOpener(urllib.FancyURLopener):
def prompt_user_passwd(self, host, realm):
raise AuthorizationRequired()
opener = MyURLOpener(proxies={'http': 'http://'+p})
fp = opener.open(url)
Другие советы
urllib.urlencode
не делает когда - либо распечатайте это сообщение.Этот метод никогда не попадает в сеть в первую очередь.Ваша проблема где-то в другом месте.
Я предполагаю, что вы запускаете какой-то другой демон в фоновом режиме, который печатает сообщение.
Пожалуйста, предоставьте точный воспроизводимый код и сообщение.Пример прокси-сервера, который запускает сообщение, также был бы хорош.
Я немного адаптировал код Дениса к этому:
import urllib
urllib.FancyURLopener.prompt_user_passwd = lambda *a, **k: (None, None)
Это полностью отключит запрос пароля