Libcurl返回损坏的数据

时间:2018-12-17 11:27:26

标签: c++ curl libcurl

curl_easy_setopt(m_pCurl,   CURLOPT_URL, szURL);
curl_easy_setopt(m_pCurl,   CURLOPT_UPLOAD,0);
curl_easy_setopt(m_pCurl,   CURLOPT_WRITEFUNCTION, s_Write_Data);
curl_easy_setopt(m_pCurl,   CURLOPT_WRITEDATA, this);
curl_easy_setopt(m_pCurl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(m_pCurl, CURLOPT_NOPROGRESS, 0);
curl_easy_setopt(m_pCurl, CURLOPT_PROGRESSFUNCTION, s_Progress);
curl_easy_setopt(m_pCurl, CURLOPT_PROGRESSDATA, this);
curl_easy_setopt(m_pCurl, CURLOPT_HTTP_CONTENT_DECODING, 0L);

以上是我所有转帐的选择。下载返回一个.tar.gz文件,使用命令行curl或WGET返回绝对好,使用libcurl返回的数据约短8k,执行cmp显示这两个文件在前10个字节内发生了变化。一直在寻找这2天,没有希望的迹象。尝试了各种不同的选择组合。

s_Write_Data实现为:

size_t CCurlManager::s_Write_Data(void *buffer, size_t size, size_t nmemb, void *userp)
{

    CCurlManager *pThis = reinterpret_cast<CCurlManager *>(userp);
    return pThis->WriteData(buffer, size, nmemb);


}

我从curl冗长得到的响应标头:

HTTP/1.1 200 OK

Date: Mon, 17 Dec 2018 13:56:39 GMT

Server: Apache/2.2.13 (Linux/SUSE)

X-Powered-By: PHP/5.4.20

Content-Length: 393800

Content-Disposition: attachment; filename="test.tar.gz"

Connection: close

Content-Type: application/octet-stream

1 个答案:

答案 0 :(得分:0)

这是wxString(wxWidgets)的问题,wxString(char *,int)创建了一个char *字符串,最多可容纳int个字符,或者直到达到空字符为止,这在大多数其他字符中都是非标准的(char *,int)仅读取int字符的字符串构造函数。

基本上,我在WriteData函数中创建的字符串在到达空字符时终止。