gpt4 book ai didi

python-3.x - 在 python 3 中请求 HTTP/2 切换协议(protocol)

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

我正在尝试使用 python 3 脚本检查 http 服务是否支持 HTTP/2。不幸的是,经过大量研究并在我的脚本上花费了大量时间后,我没有执行它。

这是我的:

import sys
import http.client as HttpClient

h2c = {
"User-agent": 'python/' + str(sys.version.split()[0]),
"Connection": "Upgrade, HTTP2-Settings",
"Upgrade": "h2c",
"HTTP2-Settings": "AAMAAABkAAQAAP__",
"Accept": "*/*"
}

c = HttpClient.HTTPSConnection(ip, port) # IP and port given in arguments
c.request('HEAD', '/', None, h2c)
r = c.getresponse()
# Print result (see below)

我知道它存在hyper但我并不总是想要 SSL,目前无法使用 hyper

禁用证书验证

这是我在本地主机上运行的脚本示例:

➜  http2 git:(master) ✗ python3 main.py -i localhost -p 443

HEAD / HTTP/1.1
Host: localhost
Upgrade: h2c
User-agent: python/3.4.2
Accept: */*
Connection: Upgrade, HTTP2-Settings
HTTP2-Settings: AAMAAABkAAQAAP__

HTTP/1.1 200 OK
Server: nginx/1.9.12
Date: Tue, 22 Mar 2016 15:05:15 GMT
Content-Type: text/html
Content-Length: 867
Last-Modified: Mon, 21 Mar 2016 10:03:18 GMT
Connection: keep-alive
ETag: "56efc6e6-363"
Accept-Ranges: bytes

我检查过并在我的 nginx 服务器上启用了 HTTP/2(使用 curl --http2)

如果有人有想法强制服务器回复HTTP 101 ...

最佳答案

HTTP/2 可以通过两种方式协商:通过 ALPN 的 TLS 或通过明文 HTTP/1.1 升级。

您在这里所做的是两种方法的混合:您正在使用 TLS 连接并发送 HTTP/1.1 升级。

您应该做的是使用 TLS 连接,使用客户端支持的协议(protocol)列表指定 ALPN 扩展(在您的情况下,至少 h2),然后 - 如果服务器接受 HTTP/2 - 开始直接发送 HTTP/2 帧(不是 HTTP/1.1 升级)。

我不是 Python 专家,但可以指定 ALPN 协议(protocol),请参阅 herehere .

你还想看看other Python projects实现了 HTTP/2。

关于python-3.x - 在 python 3 中请求 HTTP/2 切换协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36158373/

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