1

我将 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

4

3 回答 3

2

您需要覆盖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)
于 2009-11-16T15:47:03.553 回答
1

urllib.urlencode永远不会打印该消息。该方法从未首先触及网络。你的问题在别的地方。

我猜你正在后台运行其他一些打印消息的守护进程。

请提供准确的可重现代码和消息。触发消息的代理示例也很好。

于 2009-11-16T10:45:59.420 回答
1

我对 Denis 的代码做了一些修改:

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

它将完全禁用密码提示

于 2012-04-25T07:33:17.243 回答