python - 如何在 python 中通过 udp (DTLS) 套接字实现 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))
解决方案
推荐阅读
- r - 递归条件累积积
- php - 如何在谷歌日历中创建活动而不将其放入垃圾箱?
- reactjs - React componentDidMount 和 setState 似乎不会导致重新渲染以显示我的组件
- excel - 停止插入行清除第一行数据
- twitter-bootstrap - 将 bootstrap.js 导入到 lit-element 组件中
- events - 事件循环如何解除对网络 I/O 的阻塞?
- asp.net - 在禁用匿名身份验证的情况下禁用 IIS 中的“登录”弹出窗口
- node.js - 来自 URL 的 MongoDB/Express 查询对象
- javascript - VS 2019 突然停止让我调试 Javascript
- c# - 设置组合框的初始选择或默认值