我正在使用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
答案 0 :(得分: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)
答案 1 :(得分:1)
urllib.urlencode
永远打印该邮件。该方法从未首先进入网络。你的问题出在其他地方。
我猜你正在后台运行一些打印消息的守护进程。
请提供完全可重现的代码和消息。触发消息的代理示例也很好。
答案 2 :(得分:1)
我将Denis的代码改编了一下:
import urllib
urllib.FancyURLopener.prompt_user_passwd = lambda *a, **k: (None, None)
它将完全禁用密码提示