在我的c程序中,我尝试使用libcurl从本地web服务器获取数据。
这是我的代码:
int main() {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
curl_easy_setopt( curl, CURLOPT_URL, "localhost:3000/employees/2" );
curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, write_data );
res = curl_easy_perform(curl);
...
}
回调函数write_data如下:
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) {
return size;
}
当libcurl调用我的回调函数“buffer”时,它包含预期的数据。
但我面对的是错误:
Failed writing body ( 1!= 105)
Closing connection
curl_easy_perform() failed: res = 23
error = failed writing received data to disk/application
它在我不设置回调函数的情况下工作。
curl教程说:
libcurl提供了自己的默认内部回调,如果不使用CURLOPT_WRITEFUNCTION设置回调,它将处理数据。然后它将简单地将接收到的数据输出到stdout。
但是由于我设置了一个回调,我不明白为什么curl显然试图写我的数据?
我做错什么了?
最佳答案
write_data()函数必须返回已接收的字节,其大小为*nmemb。很明显,它的大小是1,nmemb设置为105。您返回的是1,所以curl是说,从1开始就没有足够的字节了!=105。
关于c - c程序: curl 失败的书写体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49582280/