libcurl断点下载遇到的问题

简介: 最近游戏把资源(图片、配置、lua)的加载、更新全部改了 ,加载其实还好,就是不走之前的zip解压方式。   以前的大体流程: 下载 –> 启动 –> 解压 –> 更新 –> 进入游戏 现在的大体流程: 下载 –> 启动 –> 更新 –> 进入游戏   之前使用散文件gzip方式更新,现在换成下载zip包(断点下载)   在改动完成之后准备提交appstore,结果崩溃的发现在某些设备上debug可以正常更新、release就始终有问题,一直失败。

最近游戏把资源(图片、配置、lua)的加载、更新全部改了 ,加载其实还好,就是不走之前的zip解压方式。

 

以前的大体流程:

下载 –> 启动 –> 解压 –> 更新 –> 进入游戏

现在的大体流程:

下载 –> 启动 –> 更新 –> 进入游戏

 

之前使用散文件gzip方式更新,现在换成下载zip包(断点下载)

 

在改动完成之后准备提交appstore,结果崩溃的发现在某些设备上debug可以正常更新、release就始终有问题,一直失败。后来在mac上安装了http的抓包工具:HttpScope。发现在head请求之后就不再继续走下去了,然后就猜测是否因为release的原因,导致写入文件时遇到权限问题了,然后就打log,重新生成release包测试…

 

最后定位到的问题是,head请求始终返回的是0,代码是这样写的:

m_pUrlHandle = curl_easy_init();

double dSize = 0.0f;
curl_easy_setopt(m_pUrlHandle, CURLOPT_URL, m_strRemoteFileUrl.c_str());
curl_easy_setopt(m_pUrlHandle, CURLOPT_HEADER, 1);
curl_easy_setopt(m_pUrlHandle, CURLOPT_NOBODY, 1);
if (curl_easy_perform(m_pUrlHandle) == CURLE_OK) {
curl_easy_getinfo(m_pUrlHandle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &dSize);
} else {
dSize = 0.0f;
}

curl_easy_cleanup(m_pUrlHandle);
m_pUrlHandle = NULL;

改动就是去掉curl_easy_setopt(m_pUrlHandle, CURLOPT_HEADER, 1);

 

默认CURLOPT_NOPROGRESS为开启的

CURLOPT_NOSIGNAL我也设置过,没用。CURLOPT_HEADER如果打开,它会将头信息输出在body中,会不会是因为没有设置CURLOPT_WRITEFUNCTION函数引起的问题呢?

 

仔细查curl的官方文档http://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html,有这样的发现:

 

也就是如果没有设置CURLOPT_WRITEFUNCTION,那它会调用默认的fwrite方法,那它的路径会是什么呢?不清楚,上面也没写,所以就有可能导致写入失败,从而导致得到的size始终为0

目录
相关文章
|
数据采集 API C语言
如何在C程序中使用libcurl库下载网页内容
爬虫是一种自动获取网页内容的程序,它可以用于数据采集、信息分析、网站监测等多种场景。在C语言中,有一个非常强大和灵活的库可以用于实现爬虫功能,那就是libcurl。libcurl是一个支持多种协议和平台的网络传输库,它提供了一系列的API函数,可以让开发者方便地发送和接收HTTP请求。
189 0
如何在C程序中使用libcurl库下载网页内容
|
5月前
|
安全 网络协议 Ubuntu
【常见开源库的二次开发】HTTP之libcurl库——libcurl使用(二)
【常见开源库的二次开发】HTTP之libcurl库——libcurl使用(二)
608 2
|
6月前
【文件分片下载 libcurl】
【文件分片下载 libcurl】
|
C++
使用libcurl进行文件上传
上篇博文讲到了如何使用multicurl来进行http并发访问,今天继续有关curl的主题,来八一八如何使用curl来上传文件,在介绍具体方法之前了解下目前http文件上传的基本实现。     rfc1867描述了如何使用http协议来上传客户端文件,目前基本上所有的浏览器和web服务器都支持ht...
1519 0
|
JavaScript 数据格式 XML
libcurl上传文件
libcurl参数很多,一不小心就容易遇到问题。曾经就遇到过一个很蛋疼的问题:libcurl断点下载>>   这里主要汇总一下,libcurl上传的二种方式: 1、直接上传文件,类似form表单,>   直接上传文件: struct curl_httppost *fo...
1468 0
|
测试技术 C++ Windows
Windows下VS2015编译并使用libcurl.lib静态库(curl:http客户端库c++版本)
Windows下VS2015编译并使用libcurl.lib静态库(curl:http客户端库c++版本)
1210 0
|
Web App开发 网络安全
|
域名解析 安全 网络协议
|
Web App开发 网络安全