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;
}
目录
相关文章
|
开发框架 Unix Linux
深度探索:Qt CMake工程编译后的自动打包策略
深度探索:Qt CMake工程编译后的自动打包策略
665 0
h264编码一帧所用时间
h264编码一帧所用时间
443 0
h264编码一帧所用时间
|
8月前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
XML 存储 数据格式
RAG效果优化:高质量文档解析详解
本文关于如何将非结构化数据(如PDF和Word文档)转换为结构化数据,以便于RAG(Retrieval-Augmented Generation)系统使用。
941 11
解锁Qt QListWidget的全部潜力——用最佳实践和技巧赢得用户的喜爱和赞誉!
解锁Qt QListWidget的全部潜力——用最佳实践和技巧赢得用户的喜爱和赞誉!
468 1
|
存储 Java Linux
Linux环境变量配置及常见问题解决方案
Linux环境变量配置及常见问题解决方案
|
存储 安全 Linux
网络请求的高效处理:C++ libmicrohttpd库详解
网络请求的高效处理:C++ libmicrohttpd库详解
|
存储 前端开发 数据安全/隐私保护
Base64详解:从编码原理到应用实践
Base64详解:从编码原理到应用实践