如何忽略“请输入用户名以访问私密代理”的提示?

1 投票
3 回答
619 浏览
提问于 2025-04-15 16:03

我在用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:4344464.79.209.203:3496864.79.197.36:43444209.59.207.197:3438

3 个回答

1

我稍微调整了一下Denis的代码,变成了这样:

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

这样做会完全关闭密码提示。

1

urllib.urlencode 这个方法根本不会打印出那个信息。这个方法本身不会连接网络。你的问题可能出在别的地方。

我猜你可能在后台运行了其他程序,它在打印这个信息。

请提供可以复现问题的具体代码和信息。如果能给出一个触发这个信息的代理示例,那就更好了。

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)

撰写回答