如何解决如何在python中通过udpDTLS套接字实现http / 3协议?
我读到http / 3使用UDP而不是TCP来发送请求,因此它使速度更快,而且我真的需要http / 3的速度,那么该怎么做才能在python中实现呢? 我根据对协议的理解编写了这段代码:
这是超文本协议,您使用UDP而不是TCP,将数据包中的http / 1.1更改为http / 3,然后发送。
我认为我错了。
这是我编写的代码:
import socket
from OpenSSL import SSL # for DTLS
connection = 'close' # or keep-alive
protocol = 'HTTP/3' # or HTTP/1.1
packet = f'GET / {protocol}\r\nHost: i.instagram.com\r\nConnection: {connection}\r\n\r\n'
def callback(conn,cert,errnum,depth,ok): cert.get_subject(); return ok
# Initialize context
ctx = SSL.Context(SSL.TLSv1_2_METHOD)
ctx.set_verify(SSL.VERIFY_PEER,callback) # Demand a certificate
# Set up client
client = SSL.Connection(ctx,socket.socket(socket.AF_INET,socket.soCK_DGRAM))
addr = ('i.instagram.com',443) #using DTLS
client.connect(addr)
buffer = packet.encode()
client.sendall(buffer) # it stuck here
print(sock.recv(4096))
解决方法
最肯定可以在Python中实现HTTP / 3。已经完成了:检出aioquic。
此外,请查看最新的QUIC和HTTP/3 Internet草稿集。您幼稚的实现是基于错误的假设。
,更简单的方法可能是使用支持HTTP / 3的Python ASGI Web服务器。
我已经使用here ASGI Web服务器创建了一个示例项目hypercorn。
服务器可以通过两种方式请求HTTP / 3;
- 与alpn
- 通过
alt-svc
标头。
hypercorn服务器使用标头方法。
我正在使用Ubuntu 20.04 LTS,并且我发现,截至2020-12-05,使用alt-svc
标头支持HTTP / 3的唯一浏览器是FireFox夜间构建。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。