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;
}
目录
相关文章
|
C语言
C语言 HTTP上传文件-利用libcurl库上传文件
原文  http://justwinit.cn/post/7626/ 通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢? 借助开源的libcurl库,我们可以容易地实现这个功能。
3130 0
|
4月前
|
容器
PostMan发送携带参数Get请求、Post请求及SpringMVC解决Post请求中文乱码问题
PostMan发送携带参数Get请求、Post请求及SpringMVC解决Post请求中文乱码问题
56 0
|
PHP
php使用CURL模拟POST请求函数
php使用CURL模拟POST请求函数
101 0
|
JavaScript
Nodejs 实现GET/POST请求
Nodejs学习记录
49 0
|
JSON PHP 数据格式
PHP:curl发送GET、POST请求
PHP:curl发送GET、POST请求
288 0
|
C++
使用libcurl进行文件上传
上篇博文讲到了如何使用multicurl来进行http并发访问,今天继续有关curl的主题,来八一八如何使用curl来上传文件,在介绍具体方法之前了解下目前http文件上传的基本实现。     rfc1867描述了如何使用http协议来上传客户端文件,目前基本上所有的浏览器和web服务器都支持ht...
1445 0
|
API PHP
php发送post请求的两种方法
php发送post请求的两种方法
400 0
|
PHP 数据格式 JSON
笔记:php curl请求头与服务端接收
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengyi_L/article/details/78223231 请求头如...
1128 0

热门文章

最新文章