curl返回值写入内存的场景
2015-12-15 14:58
363 查看
直接上代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> struct MemoryStruct { char *memory; size_t size; }; static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size * nmemb; struct MemoryStruct *mem = (struct MemoryStruct *)userp; mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1); if(mem->memory == NULL) { /* out of memory! */ printf("not enough memory (realloc returned NULL)\n"); return 0; } memcpy(&(mem->memory[mem->size]), contents, realsize); mem->size += realsize; mem->memory[mem->size] = 0; return realsize; } int main(void) { CURL *curl; CURLcode res; struct MemoryStruct chunk; static const char *postthis="Field=1&Field=2&Field=3"; chunk.memory = (char*)malloc(1); /* will be grown as needed by realloc above */ chunk.size = 0; /* no data at this point */ curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.org/"); /* send all data to this function */ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); /* we pass our 'chunk' struct to the callback function */ curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk); /* some servers don't like requests that are made without a user-agent field, so we provide one */ curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postthis); /* if we don't provide POSTFIELDSIZE, libcurl will strlen() by itself */ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(postthis)); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { /* * Now, our chunk.memory points to a memory block that is chunk.size * bytes big and contains the remote file. * * Do something nice with it! */ printf("%s\n",chunk.memory); } /* always cleanup */ curl_easy_cleanup(curl); free(chunk.memory); /* we're done with libcurl, so clean it up */ curl_global_cleanup(); } return 0; }
相关文章推荐
- 前后台彻底分离的核心文件bridge.js.
- 萌新学习BaseActivity
- 什么是持久化?
- 回顾一下多态
- oracle循环插入数据
- C语言写的俄罗斯方块
- 通过dbms_lob.substr()转换clob字段为varchar2类型
- Android蓝牙开发的一些经验
- linux内核可变参数分析
- selenium-安装-自动化环境准备-ide录制-1
- js中数组的使用
- 如何查找一个表中的索引
- SVN:客户端适用独立客户端——TortoiseSvn
- IOS VFL屏幕自适应
- java中如何定义一个泛型函数?
- 图像中添加二项式分布噪声
- PHP 魔术方法
- linux获取本机出口外网IP
- firedac的数据序列和还原单元(Data.FireDACJSONReflect.pas)之拷贝FIREDAC数据集
- JVM 崩溃 Failed to write core dump解决办法 WINDOWS