【问题标题】:urllib2.ProxyHandler - queryurllib2.ProxyHandler - 查询
【发布时间】:2013-08-20 09:31:04
【问题描述】:

定义:

urllib2.ProxyHandler([proxies])

导致请求通过代理。如果给出了代理,它必须是一个将协议名称映射到代理 URL 的字典。默认是从环境变量 _proxy 中读取代理列表。如果没有设置代理环境变量,则在 Windows 环境中,从注册表的 Internet 设置部分获取代理设置,在 Mac OS X 环境中,从 OS X 系统配置框架检索代理信息。

我的理解是,如果没有明确设置代理,它会从注册表设置中检测代理。

当我运行以下代码时:

import urllib2
proxy_support = urllib2.ProxyHandler({})
print "1"
opener = urllib2.build_opener(proxy_support)
print "2"
urllib2.install_opener(opener)
print "3"
response = urllib2.urlopen('http://google.com')
print "4"
html = response.read()

我得到了错误:

1
2
3
urllib2.URLError: <urlopen error [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond>

这意味着这段代码无法打开网站。我不确定我哪里出错了,不应该按照定义,urllib2.ProxyHandler,从注册表中删除代理,因为我没有明确设置代理?

【问题讨论】:

    标签: python url proxy python-2.6


    【解决方案1】:

    不应该按照定义 urllib2.ProxyHandler 从注册表中获取代理,因为我没有明确设置代理?

    但是您明确地将代理设置为{}。正如文档所说:

    要禁用自动检测代理,请传递一个空字典。

    而不是这个:

    proxy_support = urllib2.ProxyHandler({})
    

    你需要这样做:

    proxy_support = urllib2.ProxyHandler()
    

    【讨论】:

    • 有道理,但是当我这样做时,它会出现urllib2.HTTPError: HTTP Error 407: Proxy Authentication Required 我该如何克服呢?
    • @misguided:这意味着您的代理需要某种身份验证。无论是基本的、摘要的还是 NTLM,我都不知道。但是,如果您在文档中向下滚动几行,您可以看到用于这些的类,以及指向 HTTPPasswordMgr 的链接。 The examples 展示如何创建和使用代理身份验证处理程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多