libcurl出现CURLcode 23 CURLE_WRITE_ERROR错误 以及每次抓取网页长度不一致问题
2016-05-11 13:31
751 查看
使用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");
问题找出来了,原来网页是被压缩了,把图中的语句注释掉,服务器就不会返回压缩过的网页。这样每次获取的网页内容都是正常的了。之前也想过是不是网页请求头部出问题了,只是改过的地方不对,关键是自己对这些字段信息的设置也不懂。现在我要好好去学习一下
查看得知是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");
问题找出来了,原来网页是被压缩了,把图中的语句注释掉,服务器就不会返回压缩过的网页。这样每次获取的网页内容都是正常的了。之前也想过是不是网页请求头部出问题了,只是改过的地方不对,关键是自己对这些字段信息的设置也不懂。现在我要好好去学习一下
相关文章推荐
- 数据字典的范例
- 在Vim中使用ctags
- c++序列化库cereal使用介绍
- js防止表单重复提交
- Xml序列化自引用/循环引用问题1
- SQL truncate 、delete与drop区别
- perl内置警告信息
- CDISC SDTM EC/EX domain 学习笔记 - 4
- markdown
- Android开发如何保证Service不被杀掉
- linux修改默认时区
- 栈的应用--简单四则运算
- 依然是谋财害命之星热身赛1002密码题
- 【转】Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
- 上传文件获取Stream的方法
- IIS7.5站点配置
- android studio 使用github完整保存
- hdu 4009 Transfer water(最小树形图模板)
- python全栈开发day1
- FileZilla 服务器端win server2008以上的配置