curl CURLOPT_WRITEFUNCTION 的引數設定

superdos發表於2020-04-07

註冊CSDN有十幾年了,第一次發文。寫部落格不求有沒有人看,最大的好處是可以記錄一些心得。

最近研究CURL,第一步就卡了一天。程式碼如下:

string operation="";

curl_easy_setopt(curl,CURLOPT_URL, "http://localhost/index2.php?username=superdos&password=123"); 

curl_easy_setopt(curl,CURLOPT_POST, true); 

curl_easy_setopt(curl,CURLOPT_POSTFIELDS,operation.c_str()); 

curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,&HelloWorld::writeFunction);
curl_easy_setopt(curl,CURLOPT_WRITEDATA, &buffer);
curl_easy_setopt(curl,CURLOPT_TIMEOUT_MS,5000);
ret = curl_easy_perform(curl);
if(ret==CURLE_OK)
{
log("ok");
}
curl_easy_cleanup(curl);

其中writeFunction的宣告: size_t HelloWorld::writeFunction(void* ptr,size_t size,size_t number,void *stream);

調適過程中發現,雖然curl_easy_perform()返回正常,但是writeFunction函式中,輸入引數的內容不正常。ptr,stream輸入的不是記憶體地址,而是返回資料的長度及批次。number反而是一個記憶體地址。

後來想到在模組間傳遞類成員函式指標,必須是static的,於是在write Function的宣告前加上static後正常。

相關文章