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库,我们可以容易地实现这个功能。
3249 0
|
5月前
|
JSON API 数据安全/隐私保护
CURL 发送POST请求
CURL 发送POST请求
|
6月前
|
PHP 数据格式
PHP 中的CURL 模拟表单的post提交
PHP 中的CURL 模拟表单的post提交
101 0
|
JSON 数据格式
接口测试|HttpRunner header处理以及发送post请求
接口测试|HttpRunner header处理以及发送post请求
146 0
接口测试|HttpRunner header处理以及发送post请求
|
PHP
php使用CURL模拟POST请求函数
php使用CURL模拟POST请求函数
121 0
|
C++
使用libcurl进行文件上传
上篇博文讲到了如何使用multicurl来进行http并发访问,今天继续有关curl的主题,来八一八如何使用curl来上传文件,在介绍具体方法之前了解下目前http文件上传的基本实现。     rfc1867描述了如何使用http协议来上传客户端文件,目前基本上所有的浏览器和web服务器都支持ht...
1519 0
|
JSON PHP 数据格式
PHP:curl发送GET、POST请求
PHP:curl发送GET、POST请求
347 0
|
API PHP
php发送post请求的两种方法
php发送post请求的两种方法
432 0