有没有办法使用 libcurl >=7.3.x 从 HTTP header 获取 content-length?

Is there a way to get the content-length from an HTTP header using libcurl >=7.3.x?

我正在使用 libcurl 库接收 HTTP 请求。我想知道 body 的内容长度,以便分配内存。是否有库函数或 libcurl 库支持解析 HTTP header 的方式?当我收到 header 并且我想使用 libcurl 中被认为是标准的内容时,我不太确定检索内容长度的最有效方法是什么。我咨询了 the docs 但没有找到任何东西。

您可以使用 CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 获得 Content-Length,但我不建议您依赖它。

  1. HTTP 不强制发送 header,实际上大量 HTTP 响应在没有 header 的情况下发送,因此客户端不知道大小 before-hand.
  2. HTTP 响应可能非常大,因此如果您的客户端不能完全控制它将获得的资源,那么在内存中分配和存储整个响应可能是一个非常糟糕的主意。

您说"the protocol I am using requires total length up front",但这并不意味着HTTP 会为您提供一个。然后,您应该 可能 而不是首先获取 HTTP 响应并计算出总大小,然后再使用需要预先确定大小的第二个协议来传递数据!