C++ easy_curl_perform返回错误26(写入错误)
回拨:C++ easy_curl_perform返回错误26(写入错误),c++,curl,C++,Curl,回拨: static size_t w_callback(char *ptr, size_t size, size_t nmemb, void *userdata) { #ifdef DBG add_debug("Curl callback is called from pastebin"); #endif pastebin_ret_data = ptr; return CURLE_OK; } 主要内容: 调试: 从pastebin调用Curl回调 时间:201
static size_t w_callback(char *ptr, size_t size, size_t nmemb, void *userdata) {
#ifdef DBG
add_debug("Curl callback is called from pastebin");
#endif
pastebin_ret_data = ptr;
return CURLE_OK;
}
主要内容:
调试:
从pastebin调用Curl回调
时间:2014年12月24日星期三09:47:44
轻松执行结果:23错误消息:写入正文失败(0!=30)
问题是什么?问题是返回CURLE\u OK,而不是返回处理的字节数 CURLE_OK定义为0,这是返回的值。回调函数中您处理的字节数必须等于函数参数所接收的字节数:
size\t size,size\t nmemb
,这是您必须返回的值
文档说明:回调应该返回实际处理的字节数。如果该数量与传递给回调函数的数量不同,它将向库发出错误条件的信号。这将导致传输中止,使用的libcurl函数将返回CURLE_WRITE_错误
CURLE_WRITE_ERROR的值为23
我还注意到这些curl_easy_setopt的最后一个参数不正确:
curl_easy_setopt(curl, CURLOPT_POST, (void*)1);
curl_easy_setopt(curl, CURLOPT_URL, (void*)api_url_u8.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, (void*)w_callback);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (void*)postfields_u8.c_str());
给定参数类型,您传递的类型是正确的。void*cast不应该存在。注意回调函数的返回类型?这是
size\u t
,它应该告诉你函数应该返回一个大小,而不仅仅是一个状态码。真为我感到羞耻,谢谢!
curl_easy_setopt(curl, CURLOPT_POST, (void*)1);
curl_easy_setopt(curl, CURLOPT_URL, (void*)api_url_u8.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, (void*)w_callback);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (void*)postfields_u8.c_str());