python-请求如何发送密码名称/http2

Dil*_*lli 4 python ssl python-requests http2

我正在尝试通过 python-requests 复制以下客户端请求。

在此处输入图片说明 在客户端连接下,我看到 HTTP 版本为 2.0,TLS 版本为 1.3,据我所知,我知道请求使用 TLS 1.3。到目前为止,我的请求失败了。

我想知道我是否需要通过证书。我想了解此请求与常规请求有何不同

r = requests.get('someurl')
Run Code Online (Sandbox Code Playgroud)

如何使用请求来使用请求中显示的确切客户端连接?我不完全理解每个指针,我将如何使用具有特定密码名称的 h2 ALPN/?我不期望对这个问题有一个可靠的答案,而解释会更有帮助!

Cod*_*eIt 6

python-requests不支持HTTP 2请求。您可以使用httpx包。

HTTPX 是 Python 3 的全功能 HTTP 客户端,它提供同步和异步 API,并支持HTTP/1.1HTTP/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
Run Code Online (Sandbox Code Playgroud)

除了使用ssl.SSLContext,您还可以使用httpx.create_ssl_context()来设置 ssl 上下文。


Rap*_*aer 0

据我所知python-requests是一个库,目前1 不支持HTTP/2.0. 这个问题已经在这里得到解答

然而,有像Python httpx这样的 Python 库支持HTTP/2.0

亲切的问候,


1二月 16, 2021