试用3个库进行https通讯

本文详细对比分析了wininet、curl和poco的net三个库在模拟HTTPS网站登陆过程中的表现,探讨了各自的优势与局限性,并提出了可能的解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近开发一个软件要进行对https的网站进行模拟登陆, 找了3个库进行测试, 包括wininet,curl和poco的netssl.


首先当然是测试微软的wininet,使用很简单,只要在HttpOpenRequest加入INTERNET_FLAG_SECURE属性即可,测试时,发现每次通讯都会建立一个socket,即使加入keepalive,使用http/1.1之类的都没有用,每次连接都会耗费大量时间在重建连接,在网上搜索了一下资料,有人说是加入了INTERNET_FLAG_IGNORE_CERT_CN_INVALID属性导致的,刚好偶要登陆的网站的证书已经过期了,不用这些参数根本没法登陆.只好放弃使用了.


然后就改用curl,这个库号称性能强大,不过编译还比较麻烦的,特别是加入openssl,多线程下还要自己加同步锁,在openssl网站上找很久才找到加锁的办法.测试时,连接都很快,不过一段时间后,当socket断开后,重连时,总没法重新使用原来的session id继续原来的通讯,必须重新建立session,重新登陆.在curl的网站上查了一下,也有人反映curl没法重新使用session id 的,不过也没有给出解决办法.郁闷.


最后测试poco net, 这个库还是不错的,代码都非常简练优美, 文档都很全,编译也很方便,很方便就加入openssl,单个帐户登陆时很正常,session id也能重用,可是当偶使用多线程多个帐户登陆时,时常会出现抛出SSLConnectionUnexpectedlyClosedException异常,这时再也无法重新建立连接,不知道是网站的问题,还是poco的问题还是openssl的问题,在poco的文档也没找到关于openssl加锁的说明.而且还有很多的内存泄漏,不知道是否是那个异常导致的,还有一部分的net库的一些全局变量的内存泄漏,这些都没有找到解决办法.


最后还是很头痛,到底用那个库还是个问题,只好继续找解决办法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值