微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么请求会引发此异常“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:\Users\xyl13509876955\Desktop\Monitor\dicks.py",line 61,in send_request
    self.response=requests.get(url=url,proxies=p)
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\requests\api.py",line 76,in get
    return request('get',url,params=params,**kwargs)
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\requests\api.py",in request
    return session.request(method=method,url=url,**kwargs)
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\requests\sessions.py",line 542,in request
    resp = self.send(prep,**send_kwargs)
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\requests\sessions.py",line 655,in send
    r = adapter.send(request,**kwargs)
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\requests\adapters.py",line 449,in send
    timeout=timeout
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\urllib3\connectionpool.py",line 696,in urlopen
    self._prepare_proxy(conn)
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\urllib3\connectionpool.py",line 964,in _prepare_proxy
    conn.connect()
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\urllib3\connection.py",line 359,in connect
    conn = self._connect_tls_proxy(hostname,conn)
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\urllib3\connection.py",line 506,in _connect_tls_proxy
    ssl_context=ssl_context,File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\urllib3\util\ssl_.py",line 432,in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(sock,context,tls_in_tls)
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\site-packages\urllib3\util\ssl_.py",line 474,in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock)
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\ssl.py",line 423,in wrap_socket
    session=session
  File "C:\Users\xyl13509876955\AppData\Local\Programs\Python\python37\lib\ssl.py",line 827,in _create
    raise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname

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

解决方法

作为一种解决方法:

pip install urllib3==1.25.11

,

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

老了

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

新的

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

我已经解决了这个问题。这是 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 installing with 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/
,

在使用 Python 3.6.9 的 Ubuntu 18.04 上遇到了同样的问题,搜索了很多页面,最后通过反复试验修复了它。

修复是更改环境变量 https_proxy。以前 https_proxyhttps://127.0.0.1:<PORT>,我通过以下方式删除了 https 标头:

export https_proxy=127.0.0.1:<PORT>

然后我可以做python3 -m pip install --upgrade urllib3

,

我今天也遇到了这个错误,不知道如何解决……我编写了一个 Instagram 爬虫,需要使用 VPN 来运行它。昨天运行良好,但是今天我重新安装了python环境后,ssl.py出现了这个错误。所以我认为这个错误可能与处理代理的模块有关。比如,新版本导致了这个错误。

Traceback (most recent call last):
  File "E:/develop/Python/Project/Tutorial/ImageDownload/image_download_1.py",line 52,in <module>
    low_response = requests.get(low_url,headers=headers,stream=True)
  File "E:\develop\Python3.7.8\lib\site-packages\requests\api.py",line 76,in get
    return request('get',url,params=params,**kwargs)
  File "E:\develop\Python3.7.8\lib\site-packages\requests\api.py",line 61,in request
    return session.request(method=method,url=url,**kwargs)
  File "E:\develop\Python3.7.8\lib\site-packages\requests\sessions.py",line 542,in request
    resp = self.send(prep,**send_kwargs)
  File "E:\develop\Python3.7.8\lib\site-packages\requests\sessions.py",line 655,in send
    r = adapter.send(request,**kwargs)
  File "E:\develop\Python3.7.8\lib\site-packages\requests\adapters.py",line 449,in send
    timeout=timeout
  File "E:\develop\Python3.7.8\lib\site-packages\urllib3\connectionpool.py",line 696,in urlopen
    self._prepare_proxy(conn)
  File "E:\develop\Python3.7.8\lib\site-packages\urllib3\connectionpool.py",line 964,in _prepare_proxy
    conn.connect()
  File "E:\develop\Python3.7.8\lib\site-packages\urllib3\connection.py",line 359,in connect
    conn = self._connect_tls_proxy(hostname,conn)
  File "E:\develop\Python3.7.8\lib\site-packages\urllib3\connection.py",line 506,in _connect_tls_proxy
    ssl_context=ssl_context,File "E:\develop\Python3.7.8\lib\site-packages\urllib3\util\ssl_.py",line 432,in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(sock,context,tls_in_tls)
  File "E:\develop\Python3.7.8\lib\site-packages\urllib3\util\ssl_.py",line 474,in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock)
  File "E:\develop\Python3.7.8\lib\ssl.py",line 423,in wrap_socket
    session=session
  File "E:\develop\Python3.7.8\lib\ssl.py",line 827,in _create
    raise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname

Process finished with exit code 1

这是一个最小的可重现示例(条件:使用 VPN)

import requests

headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/89.0.4389.82 Safari/537.36","cookie": "your cookie"
           }

url = 'https://www.instagram.com/p/BInQi-Fhv2I/media/?size=l'
response = requests.get(url,stream=True)  # that is where it raised this error
,

在 Linux 上,可以通过将代理设置环境变量 https 中的 http 替换为 export https_proxy=http://123.123.123.123:8888 来解决此问题。请注意,它是 https 的代理设置,但使用了 http 地址。

,

我遇到了同样的问题,代理配置是意外启用的。只是关闭代理对我有用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。