如何解决Python超级HTTP20Connection以1024字节的块发送数据
我正在尝试使用超级0.7.0作为客户端发送一些HTTP / 2数据。数据在被发送到服务器之前被分成1024个字节的段(这让我非常恼火)。当我查看HTTP / 2 SETTINGS数据包时,没有发现任何将大小减小到64 kB以下的东西,我相信这是连接和流的默认值。有没有办法知道为什么选择1024,以及如何增加它?
我尝试过:
from hyper import HTTP20Connection
from hyper.http20.window import BaseFlowControlManager
...
class LargerWindowControlManager(BaseFlowControlManager):
def __init__(self,*args,**kwargs):
super().__init__(64000)
...
remote_connection = HTTP20Connection(f'{remote_node}',timeout=600)
remote_connection.network_buffer_size = 256000
...
remote_connection.request('POST',f'{path}',body=data,headers=headers,window_manager=LargerWindowControlManager)
我的data
大约2557字节长,它以流ID = 1的形式作为三个单独的正文片段发送。虽然我认为这应该是完全正确的,但这是我能找到的正常HTTP / 2 POST(使用curl --http2-prior-knowledge
和失败的HTTP / 2 POST(使用hyper
)之间的唯一区别。当我使用curl
时,它以单个数据包(长度为2557字节)发送数据,服务器成功响应。但是,当我使用hyper
发送带有相同标头的相同数据时,会失败(404
)。因此,我试图将数据发送到单个数据包中,而不是分成三个部分。有提示吗?
解决方法
我发现可以通过在源代码中对此进行全局更改来进行更改:
hyper-0.7.0 / hyper / http20 / stream.py:MAX_CHUNK = 1024
我不知道是否可以在每个连接或每个会话的基础上进行更改。出于某种原因,即使我像这样大块发送它,我仍然会从服务器收到404错误。
最后的问题是,hyper仅使用服务器的IP发送:Authority标头。服务器需要标头包含IP:Port。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。