作者:陈宥治政和瑋男 | 来源:互联网 | 2023-07-12 11:40
我正在尝试通过python-requests复制以下客户端请求。在客户端连接下,我看到HTTP版本为2.0,TLS版本为1.3,据我所知,我知道请求使用TLS
我正在尝试通过 python-requests 复制以下客户端请求。
在客户端连接下,我看到 HTTP 版本为 2.0,TLS 版本为 1.3,据我所知,我知道请求使用 TLS 1.3。到目前为止,我的请求失败了。
我想知道我是否需要通过证书。我想了解此请求与常规请求有何不同
r = requests.get('someurl')
如何使用请求来使用请求中显示的确切客户端连接?我不完全理解每个指针,我将如何使用具有特定密码名称的 h2 ALPN/?我不期望对这个问题有一个可靠的答案,而解释会更有帮助!
回答
python-requests
不支持HTTP 2请求。您可以使用httpx
包。
HTTPX 是 Python 3 的全功能 HTTP 客户端,它提供同步和异步 API,并支持HTTP/1.1和HTTP/2。
例子
import ssl
import httpx
# create an ssl context
ssl_cOntext= ssl.SSLContext(protocol=ssl.PROTOCOL_TLS)
# ssl.PROTOCOL_TLS - Selects the highest protocol version that both the client and server support.
# Despite the name, this option can select both "SSL" and "TLS" protocols.
# set protocol to use
ssl_context.set_alpn_protocols(["h2"])
CIPHERS = 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:!aNULL:!eNULL:!MD5:!3DES'
# set ciphers
ssl_context.set_ciphers(CIPHERS)
# httpx verify param lets you pass a standard library ssl.SSLContext
respOnse= httpx.get('https://example.com', verify=ssl_context)
print(response.http_version)
# outputs HTTP/2
除了使用ssl.SSLContext
,您还可以使用httpx.create_ssl_context()
来设置 ssl 上下文。