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");

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值