我正在使用 Curlpp 向各种 Web 服务发送请求以发送和接收数据。到目前为止,这工作得很好,因为我只用它来发送/接收 JSON 数据。
现在我遇到了一个 web 服务以二进制形式返回一个 zip 文件的情况。这是我遇到接收到的数据不完整的问题的地方。
我首先使用选项 WriteStream 将 Curl 设置为将任何数据写入 ostringstream,但事实证明这不是正确的方法,因为数据包含空字符,因此数据在第一个空字符处停止。
之后,我没有使用 WriteStream,而是使用带有回调函数的 WriteFunction。这种情况下的问题是这个函数总是被调用 2 或 3 次,而不管数据量如何。这导致总是有一些似乎不是文件第一部分的数据块,尽管数据总是包含 PK 作为前 2 个字符,表示一个 zip 文件。
我使用了几个工具来验证数据是否完全发送到我的应用程序,所以这不是 web 服务的问题。
这里是代码。请注意,主机名、端口、标头和后置字段等选项是在其他地方设置的。
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 网站消失后更糟)。