我在python3.4上有一个脚本,直到我下载文件的网站决定使用https并且现在我收到错误但我无法弄清楚如何重新检索文件之前一直没问题。
我的脚本导入以下库并使用urlretrive获取以前的文件。因为它现在转发到具有302重定向的https。我收到了一些错误。
import urllib
import urllib.request
urllib.request.urlretrieve("http://wordpress.org/latest.tar.gz", "/thefile.gz")
我的错误: -
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/urllib/request.py", line 178, in urlretrieve
with contextlib.closing(urlopen(url, data)) as fp:
File "/usr/local/lib/python3.4/urllib/request.py", line 153, in urlopen
return opener.open(url, data, timeout)
File "/usr/local/lib/python3.4/urllib/request.py", line 461, in open
response = meth(req, response)
File "/usr/local/lib/python3.4/urllib/request.py", line 571, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/local/lib/python3.4/urllib/request.py", line 493, in error
result = self._call_chain(*args)
File "/usr/local/lib/python3.4/urllib/request.py", line 433, in _call_chain
result = func(*args)
File "/usr/local/lib/python3.4/urllib/request.py", line 676, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "/usr/local/lib/python3.4/urllib/request.py", line 455, in open
response = self._open(req, data)
File "/usr/local/lib/python3.4/urllib/request.py", line 478, in _open
'unknown_open', req)
File "/usr/local/lib/python3.4/urllib/request.py", line 433, in _call_chain
result = func(*args)
File "/usr/local/lib/python3.4/urllib/request.py", line 1257, in unknown_open
raise URLError('unknown url type: %s' % type)
urllib.error.URLError: <urlopen error unknown url type: https>
答案 0 :(得分:18)
很可能您的Python安装或操作系统已损坏。
如果使用HTTPS支持编译,Python只支持HTTPS。但是,这应该是所有理智安装的默认设置。
HTTPS support is only available if the socket module was compiled with SSL support.
https://docs.python.org/3/library/http.client.html
请说明您是如何安装Python的。官方Python发行版可在python.org上找到
答案 1 :(得分:2)
Anaconda遇到了同样的问题,但是在安装OpenSSL软件包后,它运行良好。
conda install -c anaconda openssl
答案 2 :(得分:2)
存在此问题,并通过使用以下命令升级Python得以解决
brew upgrade python
答案 3 :(得分:2)
我遇到了类似的问题。
我使用了 anaconda,我只是将这两个文件移动到 anaconda3\DLLs 中,它就可以工作了。
我不知道为什么。
我知道这一点的原因是我尝试使用 ssl
模块来忽略证书错误。
import ssl
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
在这些行之后,https 错误消失并给了我另一个错误:
DLL load failed while importing _ssl: The specified module could not be found.
于是我去了this帖子,发现了这两个重要文件。
ps:ssl
模块不是必需的。
答案 4 :(得分:1)
对我来说,错误是通过下载正确版本的openssl解决的。
我在Windows 10计算机上使用python 3.7.5 32位版本。
转到 https://slproweb.com/products/Win32OpenSSL.html并下载Win32 OpenSSL v1.1.1h EXE | MSI 54MB安装程序版本。我使用32位,因为我的python解释器是32位。
安装并运行。
问题已解决:)
答案 5 :(得分:0)
用于HTTP
遇到错误的人
ValueError: unknown url type: 'http
要么
ValueError: unknown url type: b'http
同时使用urllib.request.Request
打开如下所示的网址
'http://localhost/simple_form/insert.php'
只需将localhost
更改为127.0.0.1
看起来Request方法正在URL中寻找domain.something