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. LOJ#2304. 「NOI2017」泳池

    $n \leq 1e9$底边长的泳池,好懒啊泥萌自己看题吧,$k \leq 1000$.答案对998244353取膜. 现在令$P$为安全,$Q$为危险的概率.刚好$K$是极其不好算的,于是来算$\l ...

  2. HibernateException: No Hibernate Session bound to thread

    解决No Hibernate Session bound to thread 背景交代 在使用this.getHibernateTemplate().getSessionFactory().getCu ...

  3. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---0

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...

  4. Yii框架Yiiapp()的理解

    Yii::app() 是一个实例化的对象,是我们在当前框架里边可以直接操作的对象,        我们可以把这个对象理解成请求应用的第一个对象. Yii框架是纯OOP面向对象框架,也就是利用对象调用类 ...

  5. HDU 5212 Code【莫比乌斯反演】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5212 题意: 给定序列,1≤i,j≤n,求gcd(a[i],a[j])∗(gcd(a[i],a[j] ...

  6. CountDownLatch、CyclicBarrier、Samephore浅谈三大机制

    CountDownLatch.CyclieBarrier与SamePhore都可用来控制线程的执行,那么他们之间有什么区别呢 CountDownLatch CountDowenlatch可以看成一个线 ...

  7. Codeforces 235 C

    题目大意 给定一个模板串, 再给出\(n\)个询问, 询问每一个串的循环串总共在原串中出现了多少次. 循环串: 比如说有\(str[] = \{ABCD\}\), 则其循环串有\(\{ABCD\}, ...

  8. [转] DataSet的的几种遍历

    1. 多表多行多列的情况 foreach (DataTable dt in YourDataset.Tables) //遍历所有的datatable { foreach (DataRow dr in ...

  9. Linux 在VMware中搭建CentOS6.5虚拟机

    原文:http://www.cnblogs.com/PurpleDream/p/4263465.html Linux 在VMware中搭建CentOS6.5虚拟机 前言:      本文主要是我在大家 ...

  10. openfire Android学习(六)----总结

    Xmpp的一些方法整理到一个工具类中了 XmppConnection.java [java] view plaincopy [java] view plaincopy import java.io.B ...