C++ Curlpp,请求中的数据不完整
我使用Curlpp向各种Web服务发送请求,以发送和接收数据。 到目前为止,这一切都很好,因为我只使用它来发送/接收JSON数据 现在我遇到了一种情况,Web服务以二进制形式返回zip文件。这就是我遇到的问题,接收到的数据不完整 我首先使用WriteStream选项将Curl设置为将任何数据写入ostringstream,但事实证明这不是正确的方法,因为数据包含空字符,因此数据在第一个空字符处停止 之后,我没有使用WriteStream,而是使用WriteFunction和回调函数。 这种情况下的问题是,无论数据量如何,此函数总是被调用2或3次。 这导致总是有一些数据块似乎不是文件的第一部分,尽管数据总是包含PK作为前2个字符,表示zip文件 我使用了几个工具来验证数据是否完全被发送到我的应用程序,所以这不是Web服务的问题 这是代码。请注意,主机名、端口、头和postfields等选项都在其他位置设置C++ Curlpp,请求中的数据不完整,c++,curl,curlpp,C++,Curl,Curlpp,我使用Curlpp向各种Web服务发送请求,以发送和接收数据。 到目前为止,这一切都很好,因为我只使用它来发送/接收JSON数据 现在我遇到了一种情况,Web服务以二进制形式返回zip文件。这就是我遇到的问题,接收到的数据不完整 我首先使用WriteStream选项将Curl设置为将任何数据写入ostringstream,但事实证明这不是正确的方法,因为数据包含空字符,因此数据在第一个空字符处停止 之后,我没有使用WriteStream,而是使用WriteFunction和回调函数。 这种情况下
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网站消失了)。代码的问题是,尽管数据是二进制(ZIP)格式的,但数据还是被放入std::字符串中。我建议将数据放入流(或二进制数组)中。 您还可以注册回调以检索响应头,并根据
的“内容类型”
在WriteCallback中执行操作
curlpp::options::HeaderFunction
注册回调以检索响应头。std::string
不是问题,但连接是:
requestData += ptr;
C字符串(ptr)以零结尾,如果输入包含任何零字节,则输入将被截断。您应该将其包装成一个字符串,该字符串知道其数据的长度:
requestData += std::string(ptr, size*nmemb);