libcurl以get方式请求服务器端文件

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;

}

时间: 2024-07-31 20:10:21

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

Android中客户端请求服务器端的方式讲解(一)附源码

Android中客户端请求服务器端的两种方式:Post方式和Get方式 在这里不直接赘述了,直接上源码如下: (1).Post的方式: /** * Post的请求方式 * * @param model * 请求序号 * @param paramList * 客户端请求的数据参数列表 * @return */ public JSONObject doPost(int model, List<NameValuePair> paramList) { try { // 客户端向服务器发送请求的数据 L

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

通过传统的form表单提交的方式上传文件: 1 2 3 4 5 6 7 8 9 <form id= "uploadForm" action= "http://localhost:8080/cfJAX_RS/rest/file/upload" method= "post" enctype ="multipart/form-data">       <h1 >测试通过Rest接口上传文件 </h1&g

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

通过传统的form表单提交的方式上传文件: Html代码   <form id= "uploadForm" action= "http://localhost:8080/cfJAX_RS/rest/file/upload" method= "post" enctype ="multipart/form-data"> <h1 >测试通过Rest接口上传文件 </h1> <p >指定

服务器端文件分片合并的思考和实践

笔者在项目中处理大文件上传的需求,仿照七牛云存储的接口设计.然而,在服务器端文件合并时遇到了很大的问题:合并太慢.本文记录了当时的思路和解决的方案 大文件的需求 文件上传是个很常见的需求.尽管HTTP是基于TCP上层的协议,但是HTTP协议本身并不适合处理超大的请求体,文件上传有很大的稳定性问题,如果中途断开了,将前功尽弃.为了改善用户体验或者缓解服务器压力,通常会考虑将文件分成小片,将小片一个个上传,如果中途断开了也能从某个失败的小片开始继续上传. 在前端的处理上,对于Web页面,可以采用pl

android post方式上传文件(模拟表单格式数据提交)

表单提交内容为: POST /upload.php?zp_id=ab46ca6d703e3a1580c1c9b8b3a8fb39 HTTP/1.1Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/v

安卓下使用GET方式向服务器端提交数据

从客户端提交数据给服务器端: 使用get方式向服务器端提交数据,把参数组拼到了url地址的后面: http://192.168.0.10:8080/web/servlet/LoginServlet ?username=123&password=123445 源码板块: package com.itheima.qqlogin; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; im

POST 请求静态文件 响应405

使用post方式请求js.html这样的静态文件一般的web服务器都会返回405 Method Not Allowed. 我测试用的web服务器用的是IIS(windows10+IIS10),理论上来说get方式可以请求,那post方式也应该是可以的,暂不去管这些web服务器为什么要做这样的默认设置,我只想实现post方式成功的完成请求. 搜了许多的文章,可能我没得要领,一直没有成功.后面注意到IIS的错误说明与建议,做了以下调整,最终得以成功. 处理程序映射 > StaticFile > 请

Ajax方式上传文件

用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 FormData 对象,还在用IE6 ? 只能仰天长叹.... 有了这两个对象,我们可以真正的实现Ajax方式上传文件. 示例代码: <!DOCTYPE html> <html> <head> <title>Html5 Ajax 上传文件</title>

Android必知必会-使用okhttp的PUT方式上传文件

背景 公司的文件上传接口使用PUT协议,之前一直用的都是老项目中的上传类,现在项目中使用了okhttp网络库,就查了下资料,在这里分享一下. 代码实现 /** * @param mediaType MediaType * @param uploadUrl put请求地址 * @param localPath 本地文件路径 * @return 响应的结果 和 HTTP status code * @throws IOException */ public String put(MediaType