Libcurl 分块 http 消息收到回调

Libcurl chunked http message received callback

提问人:Denis Detochka 提问时间:5/7/2018 更新时间:5/8/2018 访问量:545

问:

libcurl 是否公开了一些回调,以便在收到分块的 http 消息时调用? 一台服务器与客户端建立基于 Comet 的 http 连接。 因此,客户端使用常规 http 发送请求以打开连接, 带有分块 HTTP 消息的服务器响应,其中包含要由客户端处理的信息。使用打开的连接,服务器可能会在一个 http 请求上向客户端发送多条消息。每个必须以不同的方式处理。

有没有办法在发送后获得此消息,而无需等待连接关闭?

http libcurl 彗星

评论


答:

2赞 Daniel Stenberg 5/8/2018 #1

libcurl 默认不会公开块限制/边框,如果这是您要问的。libcurl 将“解码”分块的编码数据,并使用有效负载内容调用写入回调,而不会向应用程序透露分块。然后,libcurl 可以为每个传入的块调用一次或多次写入回调。

或者,你走更硬核的路线,让 libcurl 提供“未编码”的数据,这样你的回调就会得到整个东西,包括分块编码的元数据,这样你就可以自己解码。您可以使用 CURLOPT_HTTP_CONTENT_DECODING 选项告诉 libcurl 执行此操作。

评论

0赞 Denis Detochka 5/8/2018
非常感谢你这么快的回复,丹尼尔。每个人都能从图书馆老板那里得到答案,这绝对是令人惊奇和酷的。我无法形容我的情绪:)
0赞 Denis Detochka 5/8/2018
尝试CURLOPT_HTTP_CONTENT_DECODING等于 0。我仍然没有被调用写入回调。因此,当我收到分块消息而没有获得内容长度为 0 的最后一条分块消息作为最终消息时,不会调用写入回调,这是正确的吗?
0赞 Denis Detochka 5/8/2018
此外,我正在使用 post http 方法与服务器建立持久连接。这会以某种方式影响写入回调吗?
0赞 Daniel Stenberg 5/8/2018
libcurl 在从服务器接收到数据时调用写入回调,无论是否进行分块编码。如果你没有调用写入回调,那就真的有问题了。
0赞 Philipp Ludwig 5/14/2022
@DanielStenberg 澄清一下:当您说“不向应用程序透露块”时,这是否意味着 libcurl 将等待所有块被接收并关闭连接,然后再调用写入回调?