2010-09-19 43 views
4

在我的Python应用程序试图打开一个HTTPS URL,但我得到:urllib.py不适用于https?

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 
+0

在这种情况下使用SSL是无用的,您从一个Google服务连接到另一个服务,我不认为存在MITM攻击的风险:-) – leoluk 2010-09-19 19:57:42

回答

3

urllib和Python 2.6具有SSL支持,您的代码示例工作正常,我。你的Python可能没有SSL支持?尝试重新安装Python 2.6(或更高版本,2.7)并使用python.org的原始版本。

在谷歌应用程序引擎,尝试直接使用API​​:

from google.appengine.api import urlfetch 

url = "https://www.google.com/" 
result = urlfetch.fetch(url) 
if result.status_code == 200: 
    doSomethingWithResult(result.content) 
+0

我有Python 2.6,但由于我使用GAE,它可能会使一些限制(因为它是为Python 2.5构建的) – Halst 2010-09-19 19:08:14

+0

我已经扩展了我的答案;你使用Google的SDK吗?它不支持Python 2.6,但示例中的路径为'C:\ Python26 \ lib \ urllib.py' – leoluk 2010-09-19 19:13:35

+1

当使用HTTPS时,urllib,urllib2和httplib不验证服务器证书,这不利于HTTPS的安全使用。 (有办法解决它,但它需要更多的代码。) – Bruno 2010-09-19 19:47:20

1

尝试使用urllib2代替。

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

+0

如何切换到urllib2?我的Mac上有同样的问题! – Maverik 2011-08-12 13:27:16

+1

您需要导入urllib2而不是urllib,并重新编写适合您的代码。这是相似的,但不一样。检查python文档。 – s29 2011-08-17 04:45:40

+0

内存中触发类似错误的另一件事是,在pythonpath的某处有另一个名为“ssl.py”或“ssl.pyc”的文件。重命名或删除它。 – s29 2011-08-17 04:46:44

6

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

相关问题