curl_easy_init调用失败
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了curl_easy_init调用失败相关的知识,希望对你有一定的参考价值。
curl_easy_init调用返回CURL指针变量,但是指针为空,什么都没有,说明调用失败,请问可能是什么问题导致的呢
参考技术A 之前使用散文件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_ www.hbbz08.com 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追问
curl_easy_init是创建并初始化CURL的,这是在设置配置curl_easy_setopt之前进行的,而且你看后面无论是设置配置还是getinfo等,用这些操作的时候都会用到m_pUrlHandle这个,如果这个没有创建并初始化成功,那么后面的全部操作都将会失败的,所以说这个问题不关后面你说的setopt的问题的
linux c++中要如何调用一个http接口
如题
可以使用libcurl 库
https://curl.haxx.se/libcurl/
#include <stdio.h>#include <curl/curl.h>
int main(void)
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl)
curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
return 0;
更多的例子在这里 https://curl.haxx.se/libcurl/c/example.html
参考技术A 使用Libcurl库就行了 参考技术B 用curl这个库。本回答被提问者采纳 参考技术C 可以使用libcurl. 参考技术D 一二三四五六七八久以上是关于curl_easy_init调用失败的主要内容,如果未能解决你的问题,请参考以下文章