static size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata)
{
    FILE* stream = (FILE*)userdata;
    if (!stream) {
        printf("!!! No stream\n");
        return 0;
    }

size_t written = fwrite((FILE*)ptr, size, nmemb, stream);
    return written;

}

unsigned char* HttpsRequest::requestOnlineImage(const char* url, int& resultLen)
{
    FILE* fp = fopen("D:\\out.png", "wb");
    if (!fp) {

printf("!!! Failed to create file on the disk\n");
        return false;
    }

unsigned char* result = NULL;
    CURL* mCurl = curl_easy_init();
    if (!mCurl) {
        return NULL;

}
    //struct curl_slist* mHeaders = NULL;

//mHeaders = curl_slist_append(mHeaders, "Cache-Control:max-age=0");
    //mHeaders = curl_slist_append(mHeaders, "Connection:keep-alive");
    //mHeaders = curl_slist_append(mHeaders, "*/*");
    //mHeaders = curl_slist_append(mHeaders, "Host:cpi.cn-hangzhou.oss-pub.aliyun-inc.com");
    // mHeaders = curl_slist_append(mHeaders, "User-Agent:com.yunos.map/pc");
    //mHeaders = curl_slist_append(mHeaders, "Content-type:image/png");
    //mHeaders = curl_slist_append(mHeaders, "Response-type:application/octet-stream");
    //mHeaders = curl_slist_append(mHeaders, "Accept-Encoding:gzip, deflate");

struct MemoryStruct chunk;
    chunk.memory = (unsigned char*)malloc(1);
    chunk.size = 0;
    curl_easy_setopt(mCurl, CURLOPT_URL, url);
    //curl_easy_setopt(mCurl, CURLOPT_HTTPHEADER, mHeaders);
    curl_easy_setopt(mCurl, CURLOPT_WRITEFUNCTION, callbackfunction);
    curl_easy_setopt(mCurl, CURLOPT_WRITEDATA, fp);
    CURLcode mRes = curl_easy_perform(mCurl);

if (mRes != CURLE_OK){
        fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(mRes));

}
    else {
        printf("%s\n", chunk.memory);
        if (chunk.size > 0) {
            result = (unsigned char*)malloc(chunk.size);
            memcpy(result, chunk.memory, chunk.size);
            resultLen = chunk.size;
        }
    }
    curl_slist_free_all(mHeaders);
    free(chunk.memory); 
    curl_easy_cleanup(mCurl);
    mCurl = NULL;
    return result;

}

libcurl以get方式请求服务器端文件的更多相关文章

  1. 通过Ajax方式上传文件,使用FormData进行Ajax请求

    通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...

  2. koa2:通过Ajax方式上传文件,使用FormData进行Ajax请求

    koa2通过表单上传的网上很多,但通过Ajax方式上传文件,使用FormData进行Ajax请求,不好找. 参考了这个用base64上传图片的例子.https://github.com/Yuki-Mi ...

  3. [转] 通过Ajax方式上传文件,使用FormData进行Ajax请求

    通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...

  4. CURL 和LIBCURL C++代码 上传本地文件,好不容易碰到了这种折腾我几天的代码

    解决了什么问题:curl在使用各种方式上传文件到服务器.一般的文件上传是通过html表单进行的,通过CURL可以不经过浏览器,直接在服务器端模拟进行表单提交,完成POST数据.文件上传等功能. 服务器 ...

  5. python 全栈开发,Day129(玩具开机提示语,为多个玩具发送点播,聊天界面,app录音,app与服务器端文件传输,简单的对话)

    一.玩具开机提示语 先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.2.zi ...

  6. Ajax方式上传文件

    用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 For ...

  7. JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求

    JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求 哇,一看标题怎么这么长啊,其实意思很简单,哥讨厌用HTTP Client做POST与GET提交 觉得那个毕竟是别人写 ...

  8. 关于在页面总嵌入iframe,ifram中发起请求,服务器端的session为空问题解决

    本文抄袭:http://blog.csdn.net/ray_adon/article/details/6960724 在做项目是 是用了iframe,iframe发起ajax请求,服务器端报sessi ...

  9. 三种方式上传文件-Java

    前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...

随机推荐

  1. WEB学习-CSS行高、字体,链接的美化以及背景

    行高和字号 CSS中,所有的行,都有行高.盒模型的padding,绝对不是直接作用在文字上的,而是作用在“行”上的. 单行文本垂直居中 文本在行里面是居中 其中,行高:盒子高; 需要注意的是,这个小技 ...

  2. Windows下php环境变量的配置

    1.找到php的路径比如"E:\php_env\PHP".    2.需要保证该目录下php.ini的配置是正确的,如果是刚下载的php包,则可能需要修改相应的一些配置:将php目 ...

  3. 2019南昌邀请赛 C. Angry FFF Party 大数矩阵快速幂+分类讨论

    题目链接 https://nanti.jisuanke.com/t/38222 题意: 定义函数: $$F(n)=\left\{\begin{aligned}1, \quad n=1,2 \\F(n- ...

  4. python 中各种数据类型的排序问题

    list #按照list的第二键值排序 disP2P = [[1,2,3],[2,3,4],[4,5,6]] disP2P = sorted(disP2P,key = lambda x:x[2]) s ...

  5. Oracle 12c JDBC方式连接PDB数据库

    1.配置监听 这里假定CDB数据库名为ORCL,PDB在CDB下面名称为PDBORCLlistener.ora添加(#后面为注释,不要添加进去) SID_LIST_LISTENER = (SID_LI ...

  6. 某考试 T3 Try to find out the wrong in the test

    Discription Hint: 对于 100% 的数据, n<=10^6.

  7. Ubuntu 16.04下使用Wine安装PowerDesigner15

    说明: 1.关于没有.wine文件夹的解决方法:在命令行上运行winecfg: 2.使用的Wine版本是深度出品(Deepin),已经精简了很多没用的配置,使启动能非常快,占用资源小. 下载: (链接 ...

  8. BT服务器的搭建(tracker-P2P服务器架设)(转)

    文章虽然有点老,但原理差不多. 继上一篇文章(http://www.cnblogs.com/EasonJim/p/6601146.html)介绍了BT的原理,现在来看下BT服务端搭建的原理. 一.BT ...

  9. 朱子奇- 精算师,Tailorwoods创始人 | 到「在行」来约见我

    朱子奇- 精算师,Tailorwoods创始人 | 到「在行」来约见我 Tailorwoods

  10. ios 6.0模拟器页面调出pop窗口消失后无法使用键盘

    ios 6模拟器上,点击事件调用出pop窗口,这个窗口新创建了window,在pop窗口消失的函数中使用了makeKeyWindow,这个是将要显示的window放到最前端.发现 屏蔽这个方法后可以了 ...