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调用失败的主要内容,如果未能解决你的问题,请参考以下文章

man curl_easy_init(原创)

Ubuntu C++ 调用http接口

Ubuntu C++ 调用http接口

Curl常用函数介绍

linux c++中要如何调用一个http接口

libcurl库进行http通讯-一些基本的函数