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 位版本。

  1. 转到 https://slproweb.com/products/Win32OpenSSL.html 并下载 Win32 OpenSSL v1.1.1h 执行|微星 54MB 安装程序版本。我使用 32 位,因为我的 python 解释器是 32 位。

  2. 安装并运行。

问题已解决:)

我运行遇到了类似的问题。
我使用了 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'