curl_easy_setopt(curl,
CURLOPT_WRITEFUNCTION,
OnWriteData);
curl_easy_setopt(curl,
CURLOPT_WRITEDATA, (void
*)&strResponse);
LibCurl设置读取数据的回调函数
//lpVoid
是CURLOPT_WRITEDATA设置的缓冲区指针,buffer是libcurl内部的数据缓冲区,注意
如果读取的网页或数据特别大,那么这个函数会多次调用,所以数据必须累加起来.如下结构调用了
str->append(pData,
size
*
nmemb);
size是数据类型的大小,如sizeof(char),
nmemb是数据的大小.这个和fwrite等写文件的参数类似
传入的lpVoid可以是字符串,char *,或者是文件句柄.在这儿回调里面处理数据.如下面downLoadPackage
size_t
CHttpClient::OnWriteData(void*
buffer,
size_t
size,
size_t
nmemb,
void*
lpVoid)
{
std::string*
str
=
dynamic_cast<std::string*>((std::string
*)lpVoid);
if
(NULL
==
str
||
NULL
==
buffer)
{
return
-1;
}
char*
pData
= (char*)buffer;
str->append(pData,
size
*
nmemb);
return
nmemb;
}
size_t
CHttpClient::downLoadPackage(void
*buffer
,
size_t
size,
size_t
nmemb,
void
*lpVoid
)
{
FILE
*fp
= (FILE*)lpVoid
;
size_t
written
=
fwrite(buffer
,
size,
nmemb,
fp);
return
written;
}