import requests
from requests_toolbelt.adapters import host_header_ssl
# Create a new requests session
s = requests.Session()
# Mount the adapter for https URLs
s.mount('https://', host_header_ssl.HostHeaderSSLAdapter())
# Send your request
s.get("https://198.51.100.50", headers={"Host": "example.org"})
支持HTTPS/SNI的答案:使用requests_toolbelt module中的
HostHeaderSSLAdapter
:上述解决方案适用于非加密HTTP连接的virtualhost。对于HTTPS,还需要在TLS头中传递SNI(服务器名称标识),因为有些服务器将根据通过SNI传递的内容呈现不同的SSL证书。另外,python ssl库默认情况下不会查看
Host:
头来匹配连接时的服务器连接。上面提供了一个直接的方法,将传输适配器添加到为您处理此问题的请求中。
示例
您必须设置一个值为
example.com
的自定义头host
,如下所示:应该会成功的。如果要验证,请键入以下命令(需要netcat):
nc -l -p 80
,然后运行以上命令。它将在netcat窗口中生成输出:你必须告诉
requests
伪造Host
头,并用IP地址替换URL中的主机名:URL“修补”可以使用
urlparse
库完成:防堆栈溢出演示:
在这种情况下,我动态地查找ip地址。
相关问题 更多 >
编程相关推荐