如何通过ip地址请求https?

问题描述 投票:0回答:2

如何通过ip地址发出https请求?例如,使用cloudflare:

>>> import requests
>>> requests.get('https://104.18.5.125/', verify=False, headers={ 'host': 'example.com' })
...
requests.exceptions.SSLError: HTTPSConnectionPool(host='104.18.5.125', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_read_bytes', 'sslv3 alert handshake failure')])")))

但是当使用原始主机名发出请求时效果很好。

>>> requests.get('https://example.com/', verify=False)
<Response [200]>

尝试从 Mozilla Firefox 访问时显示:

SSL_ERROR_NO_CYPHER_OVERLAP

需要测试远程https服务器进行虚拟主机检查,但无法使用ip地址发出请求。如何禁用 python3 代码的警告并发出请求?

python-3.x ssl https
2个回答
1
投票

SSL 证书通常包含网站的域名,但不包含 IP,这意味着当您尝试使用 HTTPS 发出请求时,由于没有可用的 IP 证书,因此导致握手失败。

要解决此问题,您需要停止使用 HTTPS 或获取 IP 地址的 SSL 证书。


0
投票

现在有一个可用的请求适配器,这使得这成为可能:

https://toolbelt.readthedocs.io/en/latest/adapters.html#hostheaderssladapter

在使用中,它看起来像:

import requests
from requests_toolbelt.adapters import host_header_ssl
s = requests.Session()
s.mount('https://', host_header_ssl.HostHeaderSSLAdapter())
s.get("https://93.184.216.34", headers={"Host": "example.org"})
© www.soinside.com 2019 - 2024. All rights reserved.