libcurl出现CURLcode 23 CURLE_WRITE_ERROR错误 以及每次抓取网页长度不一致问题

使用libCURL时调用curl_easy_perform返回的CURLcode为23错误。
查看得知是CURLE_WRITE_ERROR,写文件错误。
估计是使用curl_easy_setopt时设置CURLOPT_WRITEFUNCTION或者CURLWRITEDATA时有问题,结果找了半天也没有发现。
最后发现是够早的WRITEFUNC有问题:
错误:
size_t function(const void *ptr, size_t size, size_t nmemb, const void *stream)
     … … … …
     fwrite(ptr, size, nmemb, (FILE *)stream);
     … … … …
     return 0;
}
返回值出错,正确的返回值应该是文件写入的大小
return size * nmemb;
否则就会报上面的错误。
正确函数:
size_t function(const void *ptr, size_t size, size_t nmemb, const void *stream)
     int ret;
     … … … …
     ret = fwrite(ptr, size, nmemb, (FILE *)stream);
     … … … …
     return ret;
}
这样,在fwrite正确执行时,就不会报错了。

============================================================

//headers = curl_slist_append(headers, "Accept-Encoding: gzip, deflate");

问题找出来了,原来网页是被压缩了,把图中的语句注释掉,服务器就不会返回压缩过的网页。这样每次获取的网页内容都是正常的了。之前也想过是不是网页请求头部出问题了,只是改过的地方不对,关键是自己对这些字段信息的设置也不懂。现在我要好好去学习一下

猜你喜欢

转载自blog.csdn.net/huangyimo/article/details/80368744