【问题标题】:urllib.py doesn't work with https?urllib.py 不适用于 https?
【发布时间】:2011-04-14 09:44:57
【问题描述】:

在我的 python 应用程序中,我尝试打开一个 https url,但我得到:

 File "C:\Python26\lib\urllib.py", line 215, in open_unknown
    raise IOError, ('url error', 'unknown url type', type)
IOError: [Errno url error] unknown url type: 'https'

我的代码:

import urllib
def generate_embedded_doc(doc_id):
    url = "https://docs.google.com/document/ub?id=" + doc_id + "&embedded=true"
    src = urllib.urlopen(url).read()
    ...
    return src

【问题讨论】:

  • 在这种情况下使用 SSL 是没用的,你从一个 Google 服务连接到另一个,我认为没有 MITM 攻击的风险 :-)

标签: python google-app-engine url urllib


【解决方案1】:

要获得 SSL 支持,您需要使用 OpenSSL 编译 Python。 例如在 ubuntu lucid 下你必须安装模块 libcurl4-openssl-dev 然后重新构建 Python。

【讨论】:

    【解决方案2】:

    urllib 和 Python 2.6 支持 SSL,您的代码示例对我来说很好。可能您的 Python 是在没有 SSL 支持的情况下构建的?尝试重新安装 Python 2.6(或更好的 2.7)并使用来自 python.org 的原始版本。

    在 Google App Engine 上,尝试直接使用 API:

    from google.appengine.api import urlfetch
    
    url = "https://www.google.com/"
    result = urlfetch.fetch(url)
    if result.status_code == 200:
      doSomethingWithResult(result.content)
    

    【讨论】:

    • 我有 Python 2.6,但由于我使用的是 GAE,它可能会对此有所限制(因为它是为 Python 2.5 构建的)
    • 我已经扩展了我的答案;你使用谷歌的 SDK 吗?它不支持 Python 2.6,但您示例中的路径是 C:\Python26\lib\urllib.py
    • urlliburllib2httplib 在使用 HTTPS 时不验证服务器证书,不幸的是,这不会使 HTTPS 的使用变得安全。 (有一些方法可以解决它,但它需要更多的代码。)
    【解决方案3】:

    尝试改用urllib2

    我在 OSX 10.6 上使用来自 macports 的 python 2.6.6 的 urllib 遇到了同样的问题。切换到 urllib2 修复它。

    【讨论】:

    • 如何切换到urllib2?我的 mac 也有同样的问题!
    • 您需要导入 urllib2 而不是 urllib 并重写您的代码以适应。这是相似的,但不一样。检查 python 文档。
    • 内存中触发类似错误的另一件事是在 pythonpath 的某个位置有另一个名为“ssl.py”或“ssl.pyc”的文件。重命名或删除它。
    猜你喜欢
    • 2013-09-24
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 2019-02-28
    • 2015-01-05
    • 2018-07-20
    相关资源
    最近更新 更多