首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中通过udp (DTLS)套接字实现http/3协议?

如何在python中通过udp (DTLS)套接字实现http/3协议?
EN

Stack Overflow用户
提问于 2020-09-13 04:37:40
回答 2查看 1.4K关注 0票数 2

我读到http/3使用UDP而不是TCP来发送请求,这样就可以更快地发送请求,而且我真的需要http/3的速度,所以我能做些什么来在python中实现它呢?我根据对协议的理解编写了这段代码:

这是一个超文本协议,您使用UDP而不是TCP,将包中的http/1.1更改为http/3,发送它。

我觉得我错了。

下面是我写的代码:

代码语言:javascript
复制
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))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-13 17:29:54

我们肯定可以用Python实现HTTP/3。它已经完成了:查看奥奎克

此外,请看最新的一套奎克HTTP/3互联网草案。你天真的实现是基于错误的假设。

票数 2
EN

Stack Overflow用户

发布于 2020-12-05 10:28:28

更简单的方法可能是使用支持HTTP/3的Python服务器。

我使用这里 ASGI服务器创建了一个示例项目超玉米

服务器似乎有两种方式可以请求HTTP/3;

  • 用alpn
  • 通过alt-svc头。

超级玉米服务器使用报头方法。

我使用的是Ubuntu20.04LTS,我能找到的唯一支持使用alt-svc头的HTTP/3的浏览器是FireFox夜间构建。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63867214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档