关于Libcurl双向认证请求https

HTTPS认证四:使用开源libcurl进行SSL双向认证 官网:https://curl.haxx.se/libcurl/c/libcurl.html libcurl参数说明: CURLOPT_SSLCERTTYPE:证书的格式,支持PEM, DER格式 CURLOPT_SSLCERT:客户端证书的名字,加密传输下默认格式是P12,其它方式下是PEM,使用时候用./filename避免混淆,当使用client证书的时候,很大可能需要使用privat... 阅读详情

之前通过libcurl开发只是做http请求,这次公司项目需要请求https,所以就研究了一下,其实用libcurl做http请求是非常简单的,所有底层实现都被封装到了libcurl里面(默认编译的libcurl是没有附加SSL的,也就是说默认的libcurl是不带https功能的,因此需要自己重新编译,这里是一个libcurl支持https,可以直接用),具体关于https的实现如下:

int CHttpClient::sendRequest(std::string strRequestType,
    std::string strUrl,
    std::string& strReport,
    std::string& strRetHeader,
    std::vector<std::string> vecHeader,
    std::string strParam/* ="" */,
    std::string strCookie/* ="" */,
    std::string strCaPath/* ="" */,
    int nTimeOut/* =0 */)
{
    CURL* curl;
    curl = curl_easy_init();
    curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());

    if (strRequestType.compare("post") == 0 || strRequestType.compare("POST") == 0)
    {
        curl_easy_setopt(curl, CURLOPT_POST, 1);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(strParam.c_str()));//post内容长度
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strParam.c_str());
    }
    else
    {
        curl_easy_setopt(curl, CURLOPT_POST, 0);//get请求
    }

    //设置http头
    curl_slist* headers = NULL;
    for (int i = 0; i < vecHeader.size(); i++)
    {
        if (!vecHeader.at(i).empty())
        {
            headers = curl_slist_append(headers, vecHeader.at(i).c_str());
        }
    }
    if (headers != NULL)
    {
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    }

    curl_easy_setopt(curl, CURLOPT_SSLVERSION, 1);

    //判断是否有证书
    if (strCaPath.empty())
    {
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
    }
    else
    {
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, true);
        curl_easy_setopt(curl, CURLOPT_CAINFO, "C:/ssl/cacert.pem");


        curl_easy_setopt(curl, CURLOPT_SSLCERT, "C:/ssl/client.pem");
        curl_easy_setopt(curl, CURLOPT_SSLCERTPASSWD, "11111111");
        curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
        curl_easy_setopt(curl, CURLOPT_SSLKEY, "C:/ssl/clientkey.pem");
        curl_easy_setopt(curl, CURLOPT_SSLKEYPASSWD, "11111111");
        curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
    }

    //Web服务器一般会重定向链接,比如访问http:/xxx/x1.do自动转到http:/xxx/x2.do  
    //所以一定要设置CURLOPT_FOLLOWLOCATION为1,否则重定向后的数据不会返回。  
    //curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,1); 

    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); //可以看到调试信息
    curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, _CURL_::write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEHEADER, &strRetHeader);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _CURL_::write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strReport);
    if (nTimeOut > 0)
    {
        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, nTimeOut);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, nTimeOut);
    }


    if (!strCookie.empty())
    {
        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, strCookie.c_str());
    }

    CURLcode code = curl_easy_perform(curl);

    if (code != CURLE_OK)

    {

        printf("curl_wasy_perform error = %s", curl_easy_strerror(code));
    }
    if (headers != NULL)
    {
        curl_slist_free_all(headers);
    }
    curl_easy_cleanup(curl);
    return code;
}

libcurl:https认证控制参数简介 在使用浏览器访问https链接时,浏览器会自动请求网站的安全证书,并进行证书校验,以及(使用证书)参与后续的通道加密逻辑。而使用curl(不管是curl.exe命令行工具,还是使用curllib库)请求https时,在curl的标准逻辑里面,它也会使用类似浏览器的流程,进行证书校验和加密,此时这个证书校验流程对于使用者来说,可能是需要定制的(譬如不校验,标准校验,甚至双向校验东等)。本文主要讨论通过设置libcurl的参数,来控制这个校验过程。 阅读详情

相关推荐

libcurl异步方式使用总结

libcurl异步使用

大黄鸭 1万+

通过libcurl实现https访问服务器

libcurl支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。本文通过一个示例Demo介绍通过libcurl实现https访问服务器。 对libcurl 库的封装类示例如下, ———————————————— 版权声明:本文为优快云博主「法哥2012」的...

hallyz的博客 3484

C++ libcurl POST请求进阶:从3种Content-Type到文件上传与HTTPS配置

本文深入探讨了C++ libcurl库在POST请求中的高级应用,包括三种常见Content-Type(application/x-www-form-urlencoded、application/json、multipart/form-data)的优化实现,文件上传技巧以及HTTPS安全配置。通过实际代码示例和性能优化建议,帮助开发者提升网络请求的效率和安全性,适用于后端开发和高性能网络编程场景。

weixin_28692153的博客 345

【小沐学C++】libcurl实现HTTP/HTTPS请求

libcurl 是一个免费且易于使用的客户端 URL 传输 库,支持DICT,FILE,FTP,FTPS,GOPHER,GOPHERS,HTTP,HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POPP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB、SMBS、SMTP、SMTPS、TELNET 和 TFTP。

爱看书的小沐 7954

libcurl支持https协议

在window平台下,自己编译OpenSSL,Libcurl ,来支持HTTPS传输协议。官方libcurl仅支持HTTP。此curl,支持https,包括c++需要的头文件,lib,dll等,无需自己重新编译

[RK3588-Android12] 深入解析USB Type-C PD充电功能的DTS配置与内核驱动修改

本文深入探讨了在RK3588 Android12平台上禁用USB Type-C PD充电功能的实现方法。通过分析设备树(DTS)配置与内核驱动(TCPM框架)的联动修改,详细解读了如何通过添加`pd-disable`属性及修改`tcpm.c`驱动代码,使Type-C端口绕过PD协议协商,仅工作在传统电源模式,以满足工控等特定场景对供电稳定性和成本控制的需求。

9o8p7i6u5y的博客 994

C语言实现HTTPS双向认证源码:构建安全数据传输的基石

C语言实现HTTPS双向认证源码:构建安全数据传输的基石 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今互联网环境中,数据安全已成为企业和用户关注的焦点。本文将为您介绍一个开源项目——C语言实现HTTPS双向认证源码。该项目利用C语言,结合libcurl和libevent库,实现了客户端与服务器间的安全连接,为数据传输提供了强有力的保障。 项目技术分析 核心功能...

gitblog_06796的博客 409

自抗扰控制(ADRC)原理与MATLAB实现详解

自抗扰控制(ADRC)是一种先进的鲁棒控制策略,其核心在于通过扩张状态观测器(ESO)实时估计并补偿系统总扰动。相比传统PID控制,ADRC不依赖精确数学模型,特别适合处理非线性、时变系统。从控制原理看,ADRC将系统内部动态和外部扰动统一建模,通过带宽参数化方法实现快速响应与强抗扰能力。在工程实践中,ADRC已成功应用于无人机飞控、伺服系统等场景,MATLAB仿真显示其上升时间可比PID提升46%,抗扰动恢复时间缩短60%。典型实现包含ESO设计、扰动补偿和PD控制三部分,参数整定遵循ω₀=3~5倍系统带

weixin_33585822的博客 95

C语言实现HTTPS双向认证源码

C语言实现HTTPS双向认证源码 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库包含了一个使用C语言实现的HTTPS双向认证的源码,其中使用了libcurl作为HTTPS客户端,libevent作为HTTPS服务器。该源码适用于需要在客户端与服务器之间建立安全连接的应用场景。 功能特点 客户端使用libcurl库实现HTTPS请求。 服务器使用libevent库实...

gitblog_06795的博客 730

SAP SD科目确定:从配置到凭证的财务集成核心

本文深入解析SAP SD科目确定的核心价值与配置实践,涵盖从主数据准备到财务凭证生成的全流程。通过六步配置法和KOFI00过程拆解,帮助企业实现销售与财务模块的高效集成,确保收入、成本等数据准确归集至对应会计科目,提升财务自动化水平与数据准确性。

weixin_33491377的博客 251

uniapp [安卓苹果App端] - 实现支付宝支付功能+拉起支付宝app付款支付后返回跳转到原页面,详解uniApp如何唤起本机支付宝并跳转到支付页面全流程及示例源码(APP端支付宝支付,支持打包

全网最详细的uniapp支付宝支付教程,uniapp支付宝支付流程,uni-app项目在APP端使用支付宝支付功能,uniapp前端实现支付宝支付,uniapp中唤醒支付宝进行支付并返回app,uniApp调起支付宝支付失败报错,uniapp app端调支付宝支付接口,uniapp开发安卓App对接支付宝支付,uniapp苹果ios唤起支付宝支付,uniapp调用支付宝支付uniapp开发app-调用支付宝支付,uniapp开发安卓苹果app如何接入支付宝支付,UniApp中实现支付宝支付功能,支付报错,调

🏆 前端领域优质创作者 1万+

Libcurl的编译_HTTP/HTTPSclient源代码演示样例

HTTP/HTTPSclient源代码演示样例 环境: zlib-1.2.8 openssl-1.0.1g curl-7.36 Author: Kagula LastUpdateDate: 2016-05-09 阅读前提:CMake工具的基本使用、配置openssl-1.0.1g 开发环境 编译zlib库 下载zlib-1.2.8.tar.gz并...

weixin_30381317的博客 423

C#开发的OpenRA游戏之网络接收后找到游戏对象

而这个队列是在创建这个游戏对象时组件,因为一个游戏对象有很多特性,当发现创建游戏对象时有IResolveOrder继承接口的对象,就添加到这个数组。在这里先检查一下命令是否有效的,接着就调用命令的执行对象,即是游戏对象来执行这个命令了。order.Subject就是上面解释游戏对象ID,并从游戏世界里找到的游戏对象,再从各个字段里找到对应的信息,再把这个动作交给游戏世界里的对象执行。从前面分析可知,要找到游戏世界里的对象,就需要游戏对象的ID,因此, 我们来分析游戏对象的ResolveOrder函数。

大坡3D软件开发 1035

基于LibCurl库的Linux C/C++网络编程

libCurl是一个功能强大、跨平台的网络协议库,被广泛用于实现各种网络通信模块。libCurl支持多种主流的网络协议,包括HTTP/HTTPS、FTP/FTPS、SMTP/POP3、SCP/SFTP、RTSP、LDAP、Gopher、Telnet等协议。开发者可以基于libCurl实现HTTPS证书授权、HTTP POST/PUT请求、FTP文件上传下载、Proxy代理支持、Cookies管理和用户认证等功能。1.HTTP/HTTPS通信支持GET/POST/PUT/DELETE等HTTP方法。

程序员与背包客_CoderZ 236

10、网络安全工具:Bettercap 与 Web 应用测试工具全解析

本文详细解析了网络安全工具Bettercap及其在中间人攻击和无线攻击中的应用,同时介绍了多种Web应用测试工具,如Amass、Cadaver、Dirb等,并探讨了工具的使用场景、流程、注意事项以及未来发展趋势,为网络安全测试提供了全面的指导。

u0v1w2x3的博客 229

【Linux】软件控制USB重新上电、加载:usbreset、hubpower、uhubctl

使用命令控制USB的供电、复位

郭老二 2188

libcurl使用认证证书 https认证

在server.xml中增加下面的内容: [cpp] view plaincopy ciphers="SSL_RSA_WITH_RC4_128_SHA"   下面是libcurl 的测试代码: [cpp] view plaincopy #include    #inclu

因热爱而执着,因执着而成功。 3022

YOLOv9改进,YOLOv9添加CBAM注意力机制

CBAM是一个简单而有效的注意力模块,用于前馈卷积神经网络。给定一个中间特征图,我们的模块按顺序推断两个独立维度(通道和空间)的注意力图,然后将注意力图乘以输入特征图以进行自适应特征细化。由于 CBAM 是一个轻量级的通用模块,因此它可以无缝集成到任何 CNN 架构中,开销可以忽略不计,并且可以与基础 CNN 一起进行端到端训练。论文链接:(CBAM论文)

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 857

Libcurl的编译_HTTP/HTTPS客户端源码示例

Libcurl的编译_HTTP/HTTPS客户端源码示例 标签: libcurl 2014-10-21 19:21 3372人阅读 评论(0) 收藏 举报 目录(?)[+] HTTP/HTTPS客户端源码示例 环境:  zlib-1.2.8  openssl-1.0.1g  curl-7.36 Author:  Kagula LastUpdateDat

C51ArmConWinceLinux的博客 2519

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

在windows平台用libcurl做双向认证

在windows平台用libcurl做双向认证。对这个问题需要调研一下:查找到两篇文章如下:libcurl使用认证证书 https认证https://blog.youkuaiyun.com/chary8088/article/details/22950843libcurl库的使用支持http、https、ftp(上传、下载、远端目录列表获取)https://blog.youkuaiyun.com/wu110112/art...

thanklife的专栏 1111

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

libcurl使用默认编译的winssl进行https的双向认证

winssl支持https的双向认证

v2x222的专栏 1066

HTTPS认证一:认证原理

HTTP超文本传输协议用于在web浏览器和网站服务器之间传递信息,有以下缺点: 1、通信使用明文,内容可能被窃听 2、不验证对方的身份 3、无法验证报文的完整性 所以HTTPS就来了,其中S代表SSL或者TLS,就是在原来HTTP的基础上加上一层用于数据加密、解密、身份认证的安全层,所以: HTTP+加密+认证+完整性保护 = HTTPS 加密: 对称加密:加密和解密使用同一个密钥,...

egbert123的博客 696

linux c https通信,linux C libcurl https 使用

最近一直在测试libcurl使用https服务器单向认证的情况,一直在查找原因和调试。主要出现在下面的问题上:routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error这个问题的解决思路可以在下面链接中找到:在server.xml中增加下面的内容:ciphers="SSL_RSA_WITH_RC4_128_SHA"If you're run...

weixin_35949153的博客 899

NGINX 配置本地HTTPS(双向认证)

一、SSL协议加密方式 SSL协议即用到了对称加密也用到了非对称加密(公钥加密),在建立传输链路时,SSL首先对对称加密的密钥使用公钥进行非对称加密,链路建立好之后,SSL对传输内容使用对称加密。1.对称加密速度高,可加密内容较大,用来加密会话过程中的消息。2.公钥加密加密速度较慢,但能提供更好的身份认证技术,用来加密对称加密的密钥。 ...

weixin_30710457的博客 299

Android:libcurl客户端发送https请求

如果服务端不是CA认证,那么会请求失败,需要加上两行代码,不是CA认证也正常访问。客户端只需要将url由http变成https。libcurl客户端发送https请求。

katerdaisy的博客 429
上一篇: unicode下CString转实std::string失败问题解决
下一篇: 利用Openssl解析pfx(pkcs#12)证书
RuningPigNO1
博客等级 码龄10年 22粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RuningPigNO1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值