Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Curlpp,请求中的数据不完整_C++_Curl_Curlpp - Fatal编程技术网

C++ Curlpp,请求中的数据不完整

C++ Curlpp,请求中的数据不完整,c++,curl,curlpp,C++,Curl,Curlpp,我使用Curlpp向各种Web服务发送请求,以发送和接收数据。 到目前为止,这一切都很好,因为我只使用它来发送/接收JSON数据 现在我遇到了一种情况,Web服务以二进制形式返回zip文件。这就是我遇到的问题,接收到的数据不完整 我首先使用WriteStream选项将Curl设置为将任何数据写入ostringstream,但事实证明这不是正确的方法,因为数据包含空字符,因此数据在第一个空字符处停止 之后,我没有使用WriteStream,而是使用WriteFunction和回调函数。 这种情况下

我使用Curlpp向各种Web服务发送请求,以发送和接收数据。 到目前为止,这一切都很好,因为我只使用它来发送/接收JSON数据

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

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

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

我使用了几个工具来验证数据是否完全被发送到我的应用程序,所以这不是Web服务的问题

这是代码。请注意,主机名、端口、头和postfields等选项都在其他位置设置

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);