【问题标题】:Libcurl chunked http message received callbackLibcurl 分块 http 消息收到回调
【发布时间】:2018-10-17 05:59:51
【问题描述】:

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

有没有办法在发送这些消息后无需等待连接关闭就可以获取这些消息?

【问题讨论】:

    标签: http libcurl comet


    【解决方案1】:

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

    或者,您可以选择更核心的路线并要求 libcurl 提供“未编码”的数据,以便您的回调获取整个内容,包括分块编码的元数据,以便您自己解码。您可以使用 CURLOPT_HTTP_CONTENT_DECODING 选项告诉 libcurl 这样做。

    【讨论】:

    • 非常感谢您如此迅速的回复,丹尼尔。每个人都能从图书馆老板那里得到答案真是太神奇了。我无法形容我的情绪:)
    • 尝试使用 CURLOPT_HTTP_CONTENT_DECODING 等于 0。我仍然没有调用写回调。因此,当我收到分块消息而没有将最后一条内容长度为 0 的分块消息作为最终消息时,不会调用 write 回调,对吗?
    • 另外我正在使用 post http 方法与服务器建立持久连接。这会以某种方式影响写回调吗?
    • libcurl 在从服务器接收到数据时调用写回调,无论是否分块编码。如果你没有调用 write 回调,那就真的有问题了。
    猜你喜欢
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多