下面这一段最简单不过的代码,你会觉得有什么问题?
import urllib2 import os def test(): print urllib2.urlopen("http://www.so.com").read() if __name__ == '__main__': test()
事实是,的确抛出了下面的异常,当看到网络上对这种基本的问题连解释的人都没有时,是否有一种发狂的顿挫感?
是的,这段足够简单的代码让人觉得出错都难以置信,但实际上解决问题的方法都是一样的,也就是直面问题,本身python的开源性提供了我们进一步查明问题的方法,所以只需要设置断点跟进到urlopen里的实现就好了。
因为urllib2中使用了大量的urllib模块的函数,所以发现如下获取代理的两种方式:系统环境变量和注册表。
def getproxies(): """Return a dictionary of scheme -> proxy server URLmappings. Returns settings gathered from theenvironment, if specified, or the registry. """ return getproxies_environment() or getproxies_registry()
对于系统环境变量怎么会有代理选项设置,实在不明白设置的入口,但是注册表就明了多了,“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings”下“ProxyEnable”和“ProxyServer”。
另外,上述检查最好直接通过注册表查看,如果仅仅是internet选项中,可能会蒙蔽你的眼睛,因为最开始查的时候明明internet选项中是没有设置代理的,但是注册表中真实有代理值。