libcurl的post请求模板

简介: libcurl的post请求模板
struct MemoryStruct {
  char *memory;   // 指向开辟的空间
  size_t size;    // 接收到的数据大小
};
 // 请求发送后的回调函数,将接收到的消息放在动态开辟的空间内,chunk的memory指针指向它。
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 = realloc(mem->memory, mem->size + realsize + 1);
  if (mem->memory == NULL) {
    printf("空间开辟失败\n");
    return 0;
  }
  memcpy(&(mem->memory[mem->size]), contents, realsize);
  mem->size += realsize;
  mem->memory[mem->size] = 0;
    // printf("%s", mem->memory);
  return realsize;
}
 // 请求数据,存放在chunk.memory里面,动态分配的
 // url: 指向网址字符串的指针
 // data: 指向post参数字符串的指针
int httpspost(char *url, char *data, struct MemoryStruct *chunk)
{
  chunk->size = 0;    // 清空上一次接受数据的长度
  CURL *curl = NULL;
  CURLcode res;
  curl_global_init(CURL_GLOBAL_ALL);
  /* get a curl handle */
  curl = curl_easy_init();
  if (!curl) {
    return -1;
  }
  /*设置easy handle属性*/
  /* specify URL */
  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
    // 设置URL
  curl_easy_setopt(curl, CURLOPT_URL, url);
    // 添加参数
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
  // 设置回调函数
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
    // post请求json传参必带
    struct curl_slist* headers = NULL;
  // headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
  headers = curl_slist_append(headers, "Content-Type:application/x-www-form-urlencoded");
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  curl_easy_setopt(curl, CURLOPT_POST, 1);   //设置为非0表示本次操作为POST
  curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)chunk);
  /* set commom option */
  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
  /*执行数据请求*/
  res = curl_easy_perform(curl);
  if (res != CURLE_OK) {
    fprintf(stderr, "res=%d curl_easy_perform() failed: %s\n",
        res,curl_easy_strerror(res));
  }
  curl_easy_cleanup(curl);
  curl_global_cleanup();
  return 0;
}
目录
相关文章
|
PHP
php使用CURL模拟POST请求函数
php使用CURL模拟POST请求函数
129 0
|
C++
使用libcurl进行文件上传
上篇博文讲到了如何使用multicurl来进行http并发访问,今天继续有关curl的主题,来八一八如何使用curl来上传文件,在介绍具体方法之前了解下目前http文件上传的基本实现。     rfc1867描述了如何使用http协议来上传客户端文件,目前基本上所有的浏览器和web服务器都支持ht...
1526 0
|
JavaScript 数据格式 XML
libcurl上传文件
libcurl参数很多,一不小心就容易遇到问题。曾经就遇到过一个很蛋疼的问题:libcurl断点下载>>   这里主要汇总一下,libcurl上传的二种方式: 1、直接上传文件,类似form表单,>   直接上传文件: struct curl_httppost *fo...
1472 0
|
JSON PHP 数据格式
PHP:curl发送GET、POST请求
PHP:curl发送GET、POST请求
360 0
|
API PHP
php发送post请求的两种方法
php发送post请求的两种方法
435 0
|
PHP 数据格式 JSON
笔记:php curl请求头与服务端接收
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengyi_L/article/details/78223231 请求头如...
1162 0
|
PHP C++ 测试技术
libcurl 上传文件至 web服务器
测试环境搭建, 使用 wamp server (windows下的 apache+MySQL+php)    libcurl vc6 工程代码  下载地址:  http://download.csdn.
1096 0