C++中,使用libCurl实现http的post请求

2023-05-16

#include"cJSON.h"
#include<iostream>
#include<string>
#include<QString>
#include "curl/curl.h"
using namespace std;

// 请求的服务器地址
const string CAL_HOST_URL = "http://127.0.0.1:31105";

size_t req_reply(void *ptr, size_t size, size_t nmemb, void *stream)
{
//    cout << "----->reply" << endl;
    string *str = (string*)stream;
//    cout << *str << endl;
    (*str).append((char*)ptr, size*nmemb);
    return size * nmemb;
}

// HTTP的POST请求方法
CURLcode CurlPostReq(const string &url, const string &postParams, string &response)
{
    // 初始化curl
    CURL *curl = curl_easy_init();
    // 返回code
    CURLcode res;
    if (curl)
    {
        // header信息设定
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Content-Type: application/json");
        headers = curl_slist_append(headers, "charsets: utf-8");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        // 参数信息设定
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // url
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postParams.c_str()); // params
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
        // 发起请求
        res = curl_easy_perform(curl);
    }
    // 释放curl
    curl_easy_cleanup(curl);
    return res;
}

/*
 业务方法中的调用
*/
void post_dataCleansing() {
	// http请求初始化
	curl_global_init(CURL_GLOBAL_ALL);
	// 调用参数准备
	string postUrlStr = CAL_HOST_URL + "/data_cleansing";
	cJSON_AddItemToObject(paramRoot, "padding_value", cJSON_CreateNumber(1));
	cJSON_AddItemToObject(paramRoot, "resampling_rate", cJSON_CreateNumber(2));
	char *paramData = NULL;
	paramData = cJSON_PrintUnformatted(paramRoot);
	string postParams = paramData;
	// http请求调用
	string postResponseStr;
	auto res = CurlPostReq(postUrlStr, postParams, postResponseStr);
	if (res != CURLE_OK)
	    cout << "curl_easy_perform() failed: " + string(curl_easy_strerror(res)) << endl;
	else
	    cout << postResponseStr << endl;
	// http请求释放
	curl_global_cleanup();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中,使用libCurl实现http的post请求 的相关文章

随机推荐

  • MapReduce实现二次排序

    默认情况下 xff0c Map输出的结果会按照key进行排序 xff0c 但在实际的应用中 xff0c 有时间我们不仅要对key进行排序 xff0c 同时还要对value进行排序 xff0c 这时候就要用到mapreduce中的二次排序 一
  • rosbag 从旧topic,迁移到新topic

    rosbag 从旧topic xff0c 迁移到新topic source 目标devel setup bash文件生成rules bmr迁移规则 rosbag check in bag g rules bmr修改迁移规则文件rules b
  • 研究生阅读文献技巧

    研究生如何做文献阅读和阅读笔记 以后大部分内容综合自PPT 研究生如何做文献阅读和阅读笔记 和 How to Read Paper 若侵权删 首先是一位研究生老师的建议 xff1a 今后大家提交的论文阅读笔记和工作报告尽量用英文写 可以直接
  • asp.net中执行exe应用程序

    在asp net中执行应用程序有两种方法 xff1a 1 调用win32函数ShellExecute 2 用 NET Framework中的Process类 下面我分别用这两种方法执行Windows中的记事本程序notepad exe 新建
  • Win10 安装Tensorflow-GPU版教程(附CUDA安装 could not fine compatible graphic hardware问题解答)

    入了深度学习的坑 xff0c 需要搭建Tensorflow环境 xff0c 虽然渣渣显卡 xff0c 但是总比CPU来得快 xff0c 果断选择GPU版 在网上找了很多资料 xff0c 受益颇多 但是由于tensorflow最近更新了 xf
  • 带你了解无人机的大脑-飞控

    无人机大脑 xff1a 飞控 无人机之所以能够在空中自主飞行就是因为无人机也和人一样 xff0c 也拥有一个大脑 xff0c 究竟是什么样的一个大脑才能够控制一架飞机在空中自动驾驶呢 xff1f 一起来看看 通俗点说 xff0c 能够自主起
  • STM32F103串口(ISP)下载

    1 ISP简介 ISP Iin System Programming 在系统可编程 xff0c 指电路板上的空白器件可以编程写入最终用户代码 xff0c 而不需要从电路板上取下器件 xff0c 已经编程的器件也可以用SP方式擦除或再编程 I
  • 用Docker搭建更酷的本地开发环境

    以前要在本地跑一些有意思的工程和实验 xff0c 都需要通过在本地装上一大堆软件来实现 最近发现有一种更酷的方式 xff1a Docker 用Docker在本地搭建开发环境有一系列显而易见的优势 xff1a 不用依赖公司的资源 xff0c
  • 只需修改一个像素,让神经网络连猫都认不出 | 论文+代码

    夏乙 编译整理 量子位 出品 公众号 QbitAI 想骗过神经网络 xff0c 让它认错图像 xff0c 需要对图像做多少修改 xff1f 一个像素就够了 一项来自日本的研究表明 xff0c 改动图片上的一个像素 xff0c 就能让神经网络
  • 小米迎来NLP首席科学家王斌:中科院研究员,雷军崔宝秋亲学弟

    雷刚 发自 凹非寺 量子位 报道 公众号 QbitAI 曾经武大郎 xff0c 今日小米科学家 小米又有AI科学家加盟 xff0c 这次是中国科学院信息工程研究所研究员王斌 xff0c 他将出任小米AI实验室NLP首席科学家 xff0c 负
  • IGMPv1,v2,v3详解

    简介 IGMP IGMP Internet Group Management Protocol xff09 作为因特网组管理协议 xff0c 是TCP IP协议族中负责IP组播成员管理的协议 xff0c 它用来在IP主机和与其直接相邻的组播
  • 华为最强AI芯片麒麟980发布:全球首款7nm手机芯片,双核NPU,6项世界第一

    安妮 雷刚 发自 凹非寺 量子位 报道 公众号 QbitAI 遥遥领先 xff01 这是华为消费者业务CEO余承东放下的狠话 xff0c 他说自家即将推出的手机芯片麒麟980 xff0c 将在全球范围内遥遥领先 而且领先的不是别家 xff0
  • Haar小波提升算法

    传统的小波变换是在傅里叶变换的基础上演变而来 xff0c 计算过程中存在着大量的卷积运算或是乘累加的计算 xff0c 如若在硬件上实现 xff0c 势必会消耗大量的寄存器资源 xff0c 而且速度也上不去 提升小波又称为第二代小波 xff0
  • 【Docker学习】Docker Hub + GitHub实现镜像自动构建

    近期学习Docker的相关知识 xff0c 尝试了一下Docker Hub 43 GitHub自动构建镜像 xff0c 在此记录一下过程 将GitHub账号关联到Docker Hub账号 设置位置 下滑到Linked Accounts xf
  • spring整合mybatis报错Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容

    在spring的配置文件中配置mybatis时使用的是 xff1a span class hljs comment lt 控制和MyBatis整合 gt span span class hljs tag lt span class hljs
  • linux中UDP编程

    在前面的文件中 xff0c 我们介绍了linux网络编程中与IP相关的知识和常用的函数总结 xff0c 本文针对具体的UDP通信 xff0c 来详细的介绍UDP通信的使用 xff0c 包括UDP通信中的点对点通信 xff0c 多播 xff0
  • 语音增强--卡尔曼滤波介绍及MATLAB实现

    语音增强 卡尔曼滤波 状态方程 x k 43 1 61
  • 树莓派官方系统(raspbian)安装及使用教程

    以下内容为本人原创 xff0c 欢迎大家观看学习 xff0c 禁止用于商业用途 xff0c 作者 xff1a 64 Yhen 原文网站 xff1a CSDN 原文链接 xff1a https blog csdn net Yhen1 arti
  • 主键和外键的区别

    一 什么是主键 外键 主键 xff1a 关系型数据库中的一条记录中有若干个属性 xff0c 若其中某一个属性组 注意是组 能唯一标识一条记录 xff0c 该属性组就可以成为一个主键 比如 1 学生表 学号 xff0c 姓名 xff0c 性别
  • C++中,使用libCurl实现http的post请求

    span class token macro property span class token directive hash span span class token directive keyword include span spa