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库,我们可以容易地实现这个功能。
3252 0
|
6月前
|
JSON 前端开发 数据格式
如何在Django中正确解析POST请求参数
如何在Django中正确解析POST请求参数
138 1
|
数据采集 中间件 开发者
如何使用 scrapy.Request.from_curl() 方法将 cURL 命令转换为 Scrapy 请求
我们可能需要将 cURL 命令转换为 Scrapy 请求,以便在 Scrapy 中使用 cURL 的功能。例如,我们可能想要使用 cURL 的代理设置、头部信息、表单数据等。这时候,我们可以使用 scrapy.Request.from_curl() 方法来实现这个转换。
161 0
如何使用 scrapy.Request.from_curl() 方法将 cURL 命令转换为 Scrapy 请求
|
网络协议 安全 前端开发
【JavaWeb】知识总结Ⅷ(HTTP协议, GET请求包, POST请求包, 响应包的分析)
1. http 是 TCP/IP 协议的一个应用层协议,http 也是我们 web 开发的基础. http协议特点: 2.基于请求响应模型的:一次请求对应一次响应 3.http协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的 · 缺点:多次请求之间不能共享数据 (java中使用会话技术解决session、cookie) · 优点:速度快
|
PHP
php发送post请求,koa2接受数据
php发送post请求,koa2接受数据
100 0
php发送post请求,koa2接受数据
|
PHP
php使用CURL模拟POST请求函数
php使用CURL模拟POST请求函数
123 0
|
C++
使用libcurl进行文件上传
上篇博文讲到了如何使用multicurl来进行http并发访问,今天继续有关curl的主题,来八一八如何使用curl来上传文件,在介绍具体方法之前了解下目前http文件上传的基本实现。     rfc1867描述了如何使用http协议来上传客户端文件,目前基本上所有的浏览器和web服务器都支持ht...
1521 0
|
JSON PHP 数据格式
PHP:curl发送GET、POST请求
PHP:curl发送GET、POST请求
350 0
|
API PHP
php发送post请求的两种方法
php发送post请求的两种方法
434 0