如何忽略“请输入用户名以访问私密代理”的提示?
我在用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 个回答
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)