Как игнорировать запрос «Введите имя пользователя для доступа к частному прокси»? - PullRequest
1 голос
/ 16 ноября 2009

Я использую 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

Ответы [ 3 ]

2 голосов
/ 16 ноября 2009

Вам нужно перезаписать 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)
1 голос
/ 25 апреля 2012

Я немного адаптировал код Дениса к этому:

import urllib
urllib.FancyURLopener.prompt_user_passwd = lambda *a, **k: (None, None)

Это полностью отключит запрос пароля

1 голос
/ 16 ноября 2009

urllib.urlencode не никогда не печатать это сообщение. Этот метод никогда не попадает в сеть в первую очередь. Ваша проблема в другом месте.

Полагаю, вы запускаете в фоновом режиме другого демона, который печатает сообщение.

Пожалуйста, предоставьте точный воспроизводимый код и сообщение. Пример прокси, который запускает сообщение, также был бы хорош.

...