在我的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/

10-12 04:25