首页新闻找找看学习计划

python 2.7 urllib2无法成功挂载代理,请高手指点一下,谢谢。

0
悬赏园豆:20 [已关闭问题] 关闭于 2016-01-12 15:17

请教大神帮忙看看,为什么无法挂上代理,一直提示:

HTTP Error 407: authenticationrequired

import urllib2
enable_proxy = True

proxy = "http" : "openproxy.com:8080"
proxy_handler = urllib2.ProxyHandler({proxy})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
    opener = urllib2.build_opener(proxy_handler)
else:
    opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)

req = urllib2.Request("http://www.baidu.com/")
urllib2.urlopen(req)

west_Tang风的主页 west_Tang风 | 菜鸟二级 | 园豆:201
提问于:2016-01-06 10:37
< >
分享
所有回答(2)
-1

我只是 来路过的

小熊QQ糖 | 园豆:152 (初学一级) | 2016-01-06 14:48
1

在网上搜了很久,终于找到了这个解决方法

一般代理都需要验证用户名密码,用这种写法可行。(需要Basic认证,具体原因不清楚)

def url_build_proxy_opener(proxy_info):
  passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
  passmgr.add_password(None, proxy_info['server'] , proxy_info['user'], proxy_info['password'])
  auth = urllib2.ProxyBasicAuthHandler(passmgr)
  opener = urllib2.build_opener(urllib2.ProxyHandler({'http':proxy_info['server']}) , auth)
  return opener

proxy_info = {'user':'xxxx', 'password':'xxxx' , 'server':'openproxy.xxxx.com:8080'}

opener = url_build_proxy_opener(proxy_info)

urllib2.install_opener(opener)

而直接在ProxyHandler加入用户名密码是不行的:

proxy = 'http://%s:%s@%s:%s' % ('xxxx', 'xxxx', 'openproxy.com', 8080)
proxy_handler = urllib2.ProxyHandler({"http" : proxy})

west_Tang风 | 园豆:201 (菜鸟二级) | 2016-01-06 16:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册