当前位置: 首页 > news >正文

使用libcurl请求https的get/post

最近有个需求,需要用c++请求下我自己的服务器,周末看了一下怎么发起http请求。
官方文档见:

https://curl.se/libcurl/c/example.html

官网的demo是基于c的,我用的时候报错了。下面是我写的get/post的方法,同步执行。

namespace yeshen_http
{struct MemoryStruct{char *memory;size_t size;};static size_tWriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp){size_t realsize = size * nmemb;struct MemoryStruct *mem = (struct MemoryStruct *)userp;void *ptr = realloc(mem->memory, mem->size + realsize + 1);if (!ptr){std::cout << "not enough memory (realloc returned NULL)" << std::endl;return 0;}mem->memory = (char *)ptr;memcpy(&(mem->memory[mem->size]), contents, realsize);mem->size += realsize;mem->memory[mem->size] = 0;return realsize;}static const char *get_url = "https://yeshen.org";
}int HTTP::get(const char *url, std::string &response)
{CURL *curl = curl_easy_init();struct yeshen_http::MemoryStruct chunk;chunk.memory = (char *)malloc(1);chunk.size = 0;if (curl){curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, yeshen_http::WriteMemoryCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);CURLcode res = curl_easy_perform(curl);int retCode = -1;if (res != CURLE_OK){std::cerr << "curl_easy_perform() failed:" << curl << curl_easy_strerror(res) << std::endl;}else if (chunk.size == 0){std::cout << (unsigned long)chunk.size << " bytes retrieved" << std::endl;}else{std::cout << (unsigned long)chunk.size << " bytes retrieved" << std::endl;response = chunk.memory;retCode = 0;}free(chunk.memory);curl_easy_cleanup(curl);return retCode;}return -1;
}int HTTP::post(const char *url, const std::string &data)
{CURL *curl = curl_easy_init();if (curl){const char *data_str = data.c_str();curl_easy_setopt(curl, CURLOPT_URL, url);curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data_str);curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(data_str));CURLcode res = curl_easy_perform(curl);if (res != CURLE_OK){std::cerr << "curl_easy_perform() failed:" << curl_easy_strerror(res) << std::endl;return -1;}curl_easy_cleanup(curl);return 0;}return -1;
}

cmake部分的处理

target_link_libraries(${YESHEN_TARGET_NAME} PRIVATE libcurl.so
)

相关文章:

使用libcurl请求https的get/post

最近有个需求&#xff0c;需要用c请求下我自己的服务器&#xff0c;周末看了一下怎么发起http请求。 官方文档见&#xff1a; https://curl.se/libcurl/c/example.html 官网的demo是基于c的&#xff0c;我用的时候报错了。下面是我写的get/post的方法&#xff0c;同步执行。 n…...

AUTOSAR规范与ECU软件开发(实践篇)7.3 MCAL模块配置方法及常用接口函数介绍之GPT的配置

目录 1、前言 2 、Gpt模块 (1) Gpt General配置 (2) GptChannelConfigSet配置 (3) GptClockReferencePonit配置...

Android 性能优化--内存优化分析总结

一、内存优化概念 1.1 为什么要做内存优化&#xff1f; 内存优化一直是一个很重要但却缺乏关注的点&#xff0c;内存作为程序运行最重要的资源之一&#xff0c;需要运行过程中做到合理的资源分配与回收&#xff0c;不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏&…...

buuctf web 前5题

目录 一、[极客大挑战 2019]EasySQL 总结&#xff1a; 二、[极客大挑战 2019]Havefun 总结&#xff1a; 三、[HCTF 2018]WarmUp 总论&#xff1a; 四、[ACTF2020 新生赛]Include 总结&#xff1a; 五、[ACTF2020 新生赛]Exec 总结&#xff1a; 一、[极客大挑战 2019]…...

stable diffusion实践操作-提示词-人物服饰

系列文章目录 stable diffusion实践操作-提示词 文章目录 系列文章目录前言一、提示词汇总1.1 人物服饰11.2 人物服饰2 前言 本文主要收纳总结了提示词-人物服饰。 一、提示词汇总 1.1 人物服饰1 耳饰帽子内裤内衣上身饰品手部[月牙耳环][头顶光环][丁字裤][胸罩][披风][太…...

Tomcat加载静态资源--防止SpringMVC拦截

最简洁方式&#xff1a;使用API 在配置文件下写配置类SpringMvcSupport&#xff0c;并且让SpringMVC扫描到此文件夹ComponentScan({"com.itheima.controller","com.itheima.config"}) SpringMvcSupport配置类如下 Configuration public class SpringMvcS…...

【AI数字人】如何基于ER-NeRF自训练AI数字人

文章目录 环境配置前期准备数据预处理音频预处理训练bug测试度量标准用指定的声音进行推理参考ER-NeRF,能够以更小的模型尺寸和更快的速度训练合成逼真的3D talking portrait。 环境配置 ER-NeRF项目开源于两个月前,相比于两年前的AD-NeRF,使用更新版本的tensorflow和各种…...

多目标应用:基于多目标哈里斯鹰优化算法(MOHHO)的微电网多目标优化调度研究MATLAB

一、微网系统运行优化模型 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标哈里斯鹰优化算法MOHHO 多目标哈里斯鹰优化算法&#xff08;Multi-Objective Harris Hawks Optimizer&#…...

[运维|中间件] 东方通TongWeb忘记密码后修改密码

参考文献 Tongweb忘记密码处理办法 修改密码 以下步骤将thanos用户密码修改为 thanos123.com 编辑twusers.properties文件 vim /path/to/TongWeb7.0/conf/security/twusers.properties将thanos的内容修改为默认的密码信息&#xff1a; thanos3d6391e41e9c4319$3$6774c6fc9…...

无涯教程-Android Mock Test函数

本节介绍了与 Android 相关的各种模拟测试。您可以在本地计算机上下载这些样本模拟测试,并在方便时离线解决。每个模拟测试均随附一个模拟测试键,可让您验证最终分数并为自己评分。 Mock Test I Mock Test II Mock Test III Mock Test IV Q 1 -什么是Android&#xff1f; A -A…...

保留网络[02/3]:大型语言模型转换器的继任者”

一、说明 在这项工作中&#xff0c;我们提出保留网络&#xff08;RETNET&#xff09;作为基础架构大型语言模型的结构&#xff0c;同时实现训练并行&#xff0c; 推理成本低&#xff0c;性能好。我们从理论上推导出这种联系 复发与关注之间。然后我们提出保留机制 序列建模&…...

微信小程序-生成canvas图片并保存到手机相册

wxml页面 <button class"rightbtn bottomBtnCss" catch:tap"canvasImg"><image src{{imgUrl}}/images/mine/jspj-icon.png class"restNumImg"></image><text class"btnText">生成图片</text></but…...

设计模式8:代理模式-动态代理

上一篇&#xff1a;设计模式8&#xff1a;代理模式-静态代理 目录 如何理解“动态”这两个字&#xff1f;动态代理简单的代码实例一个InvocationHandler代理多个接口有动态代理&#xff0c;为什么还要用Cglib代理&#xff1f; 如何理解“动态”这两个字&#xff1f; “动态”…...

tcp字节传输(java)-自定义包头和数据识别

1、背景 tcp传输的时候会自动拆包&#xff0c;因此服务端接收的数据段可能跟客户端发送过来的数据段长度不一致&#xff0c;比如客户端一次发送10000个字节。但是服务端接收了两次才接收完整&#xff08;例如第一次接收6000字节&#xff0c;第二次接收4000字节&#xff09;。但…...

pyspark 系统找不到指定的路径; \Java\jdk1.8.0_172\bin\java

使用用具PyCharm 2023.2.1 1&#xff1a;pyspark 系统找不到指定的路径&#xff0c; Java not found and JAVA_HOME environment variable is not set. Install Java and set JAVA_HOME to point to the Java installation directory. 解决方法&#xff1a;配置正确环境变量…...

UE4 Physics Constraint Actor 实现钟摆效果

放入场景&#xff0c;然后将一个球体放入场景 选择小球 将小球改为Movable 选择模拟物理&#xff0c;并将小球移除平衡点 就实现了...

UE4/UE5 动画控制

工程下载​ ​​​​​​​​​​​​​https://mbd.pub/o/bread/ZJ2cm5pu 蓝图控制sequence播放/倒播动画&#xff1a; 设置开启鼠标指针&#xff0c;开启鼠标事件 在场景中进行过场动画制作 设置控制事件...

Springboot整合shiro

导入依赖 <!-- 引入springboot的web项目的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> ​ <!-- shiro --><depende…...

阻塞/非阻塞、同步/异步(网络IO)

1.阻塞/非阻塞、同步/异步(网络IO) 【思考】典型的一次 IO 的两个阶段是什么&#xff1f; 数据就绪 和 数据读写 数据就绪 &#xff1a;根据系统 IO 操作的就绪状态 阻塞 非阻塞 数据读写 &#xff1a;根据应用程序和内核的交互方式 同步 异步 陈硕&#xff1a;在处理 IO …...

为什么大家会觉得考PMP没用?

一是在于PMP这套知识体系&#xff0c;是一套底层的项目管理逻辑框架&#xff0c;整体是比较抽象的。大家在学习工作之后&#xff0c;会有人告诉你很多职场的一些做事的规则&#xff0c;比如说对于沟通&#xff0c;有人就会告诉如何跟客户沟通跟同事相处等等&#xff0c;这其实就…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...