gpt4 book ai didi

c++ - Curlpp,来自请求的数据不完整

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:49 27 4
gpt4 key购买 nike

我正在使用 Curlpp 向各种网络服务发送请求以发送和接收数据。到目前为止,它运行良好,因为我只将它用于发送/接收 JSON 数据。

现在我遇到这样一种情况,即 Web 服务以二进制形式返回一个 zip 文件。这是我遇到接收到的数据不完整的问题。

我首先使用选项 WriteStream 将 Curl 设置为将任何数据写入 ostringstream,但事实证明这不是正确的方法,因为数据包含空字符,因此数据在第一个空字符处停止。

之后,我没有使用 WriteStream,而是使用了带有回调函数的 WriteFunction。这种情况下的问题是这个函数总是被调用 2 或 3 次,而不管数据量是多少。这导致总是有一些数据 block 似乎不是文件的第一部分,尽管数据总是包含 PK 作为前 2 个字符,表示一个 zip 文件。

我使用了多种工具来验证数据是否已完全发送到我的应用程序,因此这不是网络服务的问题。

这里是代码。请注意,主机名、端口、 header 和后域等选项是在别处设置的。

string requestData;

size_t WriteStringCallback(char* ptr, size_t size, size_t nmemb)
{
requestData += ptr;
int totalSize= size*nmemb;
return totalSize;
}

const string CurlRequest::Perform()
{
curlpp::options::WriteFunction wf(WriteStringCallback);
this->request.setOpt( wf );
this->request.perform();

return requestData;
}

我希望任何人都可以帮助我解决这个问题,因为我已经用完了关于如何解决这个问题的任何线索,也因为 curlpp 的文档很少(甚至更糟,因为 curlpp 网站消失了)。

最佳答案

代码的问题是数据被放入 std::string,尽管数据是二进制 (ZIP) 格式。我建议将数据放入流(或二进制数组)中。您还可以注册回调以检索响应 header 并根据 "Content-type" 在 WriteCallback 中执行操作。

curlpp::options::HeaderFunction 注册回调以检索响应 header 。

关于c++ - Curlpp,来自请求的数据不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com