C++使用curl_easy_setopt()获取内容不完整
来源:互联网 发布:js json转成url编码 编辑:程序博客网 时间:2024/05/10 14:48
最近在代码中发现一个问题,我们的C++框架中,使用Curl来获取数据,但是若数据长度较多时,获取的数据不完整,只有后半部分,推测是由于接受数据的缓冲区设置过小造成的。后来调大了缓冲区,问题还是没有解决。
在我们的代码中,使用curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_memory_callback);函数来接受保存数据。这个函数调用回调函数write_memory_callback来保存数据,查看了一下write_memory_callback函数,代码如下:
static size_t write_memory_callback(void *contents, size_t size, size_t nmemb, void *userp){ size_t real_size = nmemb * size; memcpy(userp, contents, real_size); ((char*)userp)[real_size] = '\0'; return real_size;}
这段函数中,使用了memcpy函数来将接受的内容保存到字符串中。
问题原因已经很明显了,使用memcpy函数会将当前内容覆盖原字符串,这样字符串中保存的始终是最近一次接受的内容,所以每次返回的结果都是不完整的。
产生这个问题的根源在于,回调函数处理的数据有最大值,定义在curl.h文件中,CURL_MAX_WRITE_SIZE = 16k。若传送的数据超过限额,curl会自动分成多次传送,因此需要将字符串拼接起来才能得到完整的结果。
解决方法:将memcpy换成strncat即可。
参考:
http://blog.chinaunix.net/uid-14351756-id-2820622.html
————The End————
0 0
- C++使用curl_easy_setopt()获取内容不完整
- curl_easy_setopt完整参数列表
- 使用curl_easy_setopt造成阻塞
- jsp 响应内容不完整
- GridView 内容加载不完整
- C语言使用socket获取网页内容
- select下拉框内容显示不完整
- c#完整地获取网页内容
- Struts获取页面对象不完整问题
- php curl 获取数据不完整
- cURL简单使用、libcurl编程, curl_easy_setopt
- asp通过xmlhttp抓取网页内容不完整
- syslog4j消息内遇中文,消息内容不完整解决办法
- php获取数据为什么curl获取不完整
- c语言获取文件内容
- 怎么解决jsoup不能完整获取响应内容的问题
- 获取网页内容(不登录_PHP&.NET)
- 获取网页内容之后图片不显示
- 编程面试的10大算法概念汇总
- [LeetCode]Best Time to Buy and Sell Stock II
- IOS开发之页面切换
- 2012年蓝桥杯 猜生日 【初赛试题】
- g++编译动态链接库
- C++使用curl_easy_setopt()获取内容不完整
- curd实体操作
- android客户端访问pc服务器端的复杂数据类型
- 初次使用VS2010基于C++开发项目碰到的问题及解决方法
- jquery media 插件中的大坑
- Linux 串口驱动程序开发
- JDBC连接mysql获取结果集行数
- Eclipse无提示的解决办法
- 逆波兰表达式 - 蓝桥杯