为什么请求会引发此异常“check_hostname需要server_hostname”?

p={
    'http':'http://my correct proxy here',
    'https':'https://my correct proxy here'
    }
self.response=requests.get(url=url,headers=self.headers,timeout=(6,15),proxies=p)

然后它引发异常:

Traceback (most recent call last):
  File "C:Usersxyl13509876955DesktopMonitordicks.py", line 61, in send_request
    self.response=requests.get(url=url,headers=self.headers,timeout=(6,15),proxies=p)
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesrequestsapi.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesrequestsapi.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesrequestssessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesrequestssessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesrequestsadapters.py", line 449, in send
    timeout=timeout
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesurllib3connectionpool.py", line 696, in urlopen
    self._prepare_proxy(conn)
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesurllib3connectionpool.py", line 964, in _prepare_proxy
    conn.connect()
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesurllib3connection.py", line 359, in connect
    conn = self._connect_tls_proxy(hostname, conn)
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesurllib3connection.py", line 506, in _connect_tls_proxy
    ssl_context=ssl_context,
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesurllib3utilssl_.py", line 432, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libsite-packagesurllib3utilssl_.py", line 474, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock)
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libssl.py", line 423, in wrap_socket
    session=session
  File "C:Usersxyl13509876955AppDataLocalProgramsPythonPython37libssl.py", line 827, in _create
    raise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname

请帮我解决问题,最好的方法是向我展示正确的代码。我对这个问题感到非常困惑和沮丧!!

回答

作为解决方法:

pip 安装 urllib3==1.25.11

  • Same error when executing "pip install urllib3==1.25.11" ...

回答

据我了解,在新的 urllib3 中,代理的主要架构已更改...可以在这里阅读。这个设置对我有帮助(对于 urllib3=1.26.4)。

一个老

proxy={
    'http':'8.88.888.8:8888',
    'https':'8.88.888.8:8888'
    }
proxy={
    'http':'8.88.888.8:8888',
    'https':'8.88.888.8:8888'
    }

新的

proxy={
    'https': 'https://8.88.888.8:8888',
    'http': 'http://8.88.888.8:8888',
    } 

更新

我再次遇到这个问题的请求 2.26.0,但这次它适用于旧模式......



回答

我已经解决了这个问题。这是 urllib3 的一个错误。

您可以使用 pip install urllib3==1.25.8


回答

降级 urllib3 也为我解决了这个问题。虽然我不得不重置代理环境变量:
https_proxy="http://127.0.0.1:<PROXY_PORT>" pip install urllib3==1.25.11

没有它,我会收到以下错误,并且无法降级 urllib3(请参阅SSLError 安装 pip)。

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1091)'))': /simple/pip/


以上是为什么请求会引发此异常“check_hostname需要server_hostname”?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>