当前位置: 首页 > 知识库问答 >
问题:

python请求中的OpenSSL错误

谭昱
2023-03-14

运行python版本3.9.1在arch linux与OpenSSL版本1.1.1i和pyopenssl版本1.1.1i我得到以下错误时,尝试使用https代理与请求模块:

    Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/urllib3/connectionpool.py", line 696, in urlopen
    self._prepare_proxy(conn)
  File "/usr/lib/python3.9/site-packages/urllib3/connectionpool.py", line 964, in _prepare_proxy
    conn.connect()
  File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 359, in connect
    conn = self._connect_tls_proxy(hostname, conn)
  File "/usr/lib/python3.9/site-packages/urllib3/connection.py", line 496, in _connect_tls_proxy
    return ssl_wrap_socket(
  File "/usr/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 424, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)
  File "/usr/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 466, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock)
  File "/usr/lib/python3.9/ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "/usr/lib/python3.9/ssl.py", line 1040, in _create
    self.do_handshake()
  File "/usr/lib/python3.9/ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3.9/site-packages/urllib3/util/retry.py", line 573, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.9/site-packages/requests/api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/lib/python3.9/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3.9/site-packages/requests/adapters.py", line 514, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)')))

我正在运行的代码是:

import requests

proxy = {
    'https' : 'https://proxyip:proxyport'
}

requests.get("https://google.com", proxies=proxy)

无论我尝试什么https代理,我都会得到相同的错误。我还重新安装了openssl和python,没有任何更改。有什么建议吗?

共有2个答案

崔恺
2023-03-14

它是固定与我的情况下,通过这个命令:

 python3 -m pip install urllib3==1.22
艾俊悟
2023-03-14
... line 496, in _connect_tls_proxy

您的代码试图使用(新)支持通过HTTPS访问代理本身。之所以这样做,是因为您明确地将该URL作为代理指定为https://...而非http://...

'https' : 'https://proxyip:proxyport'
           ^^^^^^

很可能代理本身不支持到代理的TLS连接。通常HTTP代理只有到代理的普通HTTP连接。他们仍然可以通过这种方式代理HTTPS流量,因为客户端只需向代理发出一个连接请求来创建一个隧道,然后在客户端和服务器之间使用端到端TLS。

通过HTTPS访问代理将在客户端和代理之间添加额外的TLS层,这是大多数代理不支持的。因此,您可能需要普通HTTP代理:

 'https' : 'http://proxyip:proxyport'
           ^^^^^^

请注意,在旧版本的请求库中,使用http://https://进行访问都有效。这些旧版本不支持HTTPS到代理,只使用普通HTTP,即使指定了HTTPS://

 类似资料:
  • HTTP/1.1 408 REQUEST_TIMEOUT内容-长度:0连接:关闭 已关闭 --------------------------------------------------------------------------------------- 它会导致请求超时。如果我使用curl命令,它是成功的。 请求超时的原因是什么?

  • 问题内容: 我尝试了python 请求库文档中提供的示例。 使用,我得到了响应代码,但是我想获得所请求的每个页面的内容。例如,这不起作用: 问题答案: 注意 下面的答案是不适用于请求v0.13.0 +。编写此问题后,异步功能已移至。但是,你可以将其替换为下面的内容,它应该可以工作。 我已经留下了这个答案,以反映原始问题,即有关使用请求的问题。 要异步执行多个任务,你必须: 为每个对象定义一个函数(

  • 我使用下面的代码发出http请求,但当抛出异常时,我无法获取每个字段的错误消息。在postman中,它确实显示了正确的错误消息: 它只是显示消息“” 然而,在《邮递员》中,它显示:

  • 问题内容: 在尝试为uWSGI中的请求设置超时时,我不确定设置是否正确。似乎有多个超时选项(套接字,接口等),并且不清楚要配置哪个设置或在哪里进行设置。 我正在寻找的行为是延长对REST应用程序的资源层的请求可以花费的时间。 问题答案: 您可能正在寻找 harakiri 参数- 如果请求花费的时间超过指定的harakiri时间(以秒为单位),则该请求将被删除,并且相应的工作程序将被回收。 对于独立

  • 我正在使用实现一个联系人应用程序。现在,我正试图通过发送以下格式的put请求来更新联系人 我将XML作为字符串发送,作为请求的主体。这是我的xmlString(请求主体) 我写了下面的代码来发送更新联系人的PUT请求。 当我试图在中发送请求时,联系人更新成功。但是当我试图运行上面的程序时,我得到了 400错误请求错误 我不知道我哪里出错了。任何帮助都将不胜感激!