gpt4 book ai didi

通过 SNI 代理的 Python SSL

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:54 26 4
gpt4 key购买 nike

我在使用 Python 通过 SNI 代理服务器连接时遇到问题,以下代码片段显示连接和执行脚本导致不同的连接错误(握手,错误版本),具体取决于使用的 ssl 版本:

#!/usr/bin/python
import requests
import ssl
from requests.adapters import HTTPAdapter
try:
from requests.packages.urllib3.poolmanager import PoolManager
except:
from urllib3.poolmanager import PoolManager

class SSLAdapter(HTTPAdapter):
def init_poolmanager(self, connections, maxsize, block=False):
ssl_version=ssl.PROTOCOL_TLSv1
#ssl_version=ssl.PROTOCOL_SSLv23
#ssl_version=ssl.PROTOCOL_SSLv3
assert_hostname = 'netflix.com'
self.poolmanager = PoolManager(num_pools=connections,maxsize=maxsize,block=block,ssl_version=ssl_version,assert_hostname=assert_hostname)

def newSession():
s = requests.Session()
s.mount('https://', SSLAdapter())
s.headers.update({'User-Agent': 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.6 Safari/537.36'})
return s

urlMain = "https://www.netflix.com"
session = None
session = newSession()
session.get(urlMain, verify=False).text

这导致:

requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

查看sniproxy服务器的日志,可以看到省略了servername None[];

2015-02-22 08:25:23 000.000.73.222:59288 -> 000.00.77.145:443 -> NONE [] 0/0 bytes tx 0/0 bytes rx 20.179 seconds

我如何修改脚本,以便它随请求发送服务器名?

最佳答案

pip install pyopenssl
pip install ndg-httpsclient
pip install pyasn1

应该可以解决问题。连接到 https://alice.sni.velox.ch 以验证 SNI 是否正常工作。
using requests with TLS doesn't give SNI support

关于通过 SNI 代理的 Python SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com