urllib HTTPS 请求:<urlopen error unknown url type: https>
urllib HTTPS request: <urlopen error unknown url type: https>
我在 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>
很可能您的 Python 安装或操作系统已损坏。
Python 仅在编译时支持 HTTPS 时才支持 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
获得
我在 Anaconda 上遇到了同样的问题,但在安装 OpenSSL 软件包后,它运行良好。
conda install -c anaconda openssl
遇到过这个问题,通过将 Python 升级为
解决了这个问题
brew upgrade python
用于 HTTP
遇到错误的人
ValueError: unknown url type: 'http
要么
ValueError: unknown url type: b'http
同时打开一些 url,如下所示 urllib.request.Request
'http://localhost/simple_form/insert.php'
只需将 localhost
更改为 127.0.0.1
看起来 Request 方法正在 url
中寻找 domain.something
对我来说,通过下载正确版本的 openssl 解决了错误。
我在 windows 10 机器上使用 python 3.7.5 32 位版本。
转到
https://slproweb.com/products/Win32OpenSSL.html 并下载 Win32 OpenSSL v1.1.1h
执行|微星 54MB 安装程序版本。我使用 32 位,因为我的 python 解释器是 32 位。
安装并运行。
问题已解决:)
我运行遇到了类似的问题。
我使用了 anaconda,我只是将这两个文件移动到 anaconda3\DLLs 并且它起作用了。
- libcrypto-1_1-x64.dll
- libssl-1_1-x64.dll
我不知道为什么。
我知道这是因为我试图使用 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.
所以我去了 post 并找到了这两个重要文件。
ps: ssl
模块不是必需的。
如果你的 url 有单引号或双引号,即 ''
或 ""
,那么它也会给出这个错误。
将单引号或双引号替换为 %20
url='http://whosebug.com/wizard.php?id="hah"'
应该改为
url='http://whosebug.com/wizard.php?id=%20hah%20'
我在 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>
很可能您的 Python 安装或操作系统已损坏。
Python 仅在编译时支持 HTTPS 时才支持 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
获得我在 Anaconda 上遇到了同样的问题,但在安装 OpenSSL 软件包后,它运行良好。
conda install -c anaconda openssl
遇到过这个问题,通过将 Python 升级为
解决了这个问题brew upgrade python
用于 HTTP
遇到错误的人
ValueError: unknown url type: 'http
要么
ValueError: unknown url type: b'http
同时打开一些 url,如下所示 urllib.request.Request
'http://localhost/simple_form/insert.php'
只需将 localhost
更改为 127.0.0.1
看起来 Request 方法正在 url
中寻找domain.something
对我来说,通过下载正确版本的 openssl 解决了错误。
我在 windows 10 机器上使用 python 3.7.5 32 位版本。
转到 https://slproweb.com/products/Win32OpenSSL.html 并下载 Win32 OpenSSL v1.1.1h 执行|微星 54MB 安装程序版本。我使用 32 位,因为我的 python 解释器是 32 位。
安装并运行。
问题已解决:)
我运行遇到了类似的问题。
我使用了 anaconda,我只是将这两个文件移动到 anaconda3\DLLs 并且它起作用了。
- libcrypto-1_1-x64.dll
- libssl-1_1-x64.dll
我不知道为什么。
我知道这是因为我试图使用 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.
所以我去了
ps: ssl
模块不是必需的。
如果你的 url 有单引号或双引号,即 ''
或 ""
,那么它也会给出这个错误。
将单引号或双引号替换为 %20
url='http://whosebug.com/wizard.php?id="hah"'
应该改为
url='http://whosebug.com/wizard.php?id=%20hah%20'