Qt 技巧: 解决未解析的SSL问题

因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作:

需要安装OpenSSL库:

1、首先打开http://slproweb.com/products/Win32OpenSSL.html网页;

2、下载安装包,我下载的是:Win32 OpenSSL v1.0.1c Light安装包,随着时间的推进,这个版本会不断更新的;

3、安装(exe文件)到本地,并且在安装过程中选择将库安装到OpenSSL的安装目录(/bin)下面。

4、将libeay32.dll 和 ssleay32.dll 文件拷贝到Qt中的存放有QtNetwork4.dll和QtNetworkd4.dll的文件目录下。我的是D:\Qt\4.8.2\bin

现在可以编写代码:

QNetworkRequest request;
QSslConfiguration config;

config.setPeerVerifyMode(QSslSocket::VerifyNone);
 config.setProtocol(QSsl::TlsV1);
 request.setSslConfiguration(config);

上面三句添回检验证书模式与协议,并设置给对应QNetworkRequest,非常重要,在这里花费了我半天的时间才找到问题

request.setUrl(QUrl("https://www.xxx.com/html.jsp"));
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
request.setHeader(QNetworkRequest::ContentLengthHeader, bytePost.length());
QNetworkReply *pReply = pManager->post(request, bytePost);

备注:

SSL证书认证,有以下三种:

1.
 QSslConfiguration config ;

config.setPeerVerifyMode(QSslSocket::VerifyNone);
 config.setProtocol(QSsl::TlsV1);

QNetworkRequest request(req);
 request.setSslConfiguration(config);

2.
 QNetworkRequest request ;

request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
 QNetworkReply* reply = QNetworkAccessManager::createRequest(op, request, outgoingData);
 reply->ignoreSslErrors();

3.
 QSslConfiguration config ;

QList<QSslCertificate> certs = QSslCertificate::fromPath("C:\\FiddlerRoot.crt");
 config.setCaCertificates(certs);

QNetworkRequest request(req);
 request.setSslConfiguration(config);

转载自:http://blog.csdn.net/itjobtxq/article/details/8244509

http://blog.csdn.net/jan5_reyn/article/details/38955711

时间: 2024-10-19 01:45:47

Qt 技巧: 解决未解析的SSL问题的相关文章

如何解决DNS解析错误故障

DNS解析出现错误,就是把一个域名解析成一个错误的IP地址,或者根本不知道某个域名对应的IP地址是什么时,我们就无法通过域名访问相应的站点了,这就是DNS解析故障.出现DNS解析故障最大的症状就是访问站点对应的IP地址没有问题,然而访问他的域名就会出现错误. 判断是否出现DNS解析故障的方法 点击开始->运行->输入CMD"后回车,输入"nslookup"回车,在输入你的域名,如果出现DNS request timed out,timeout was 2 seco

java配置ueditor中解决“未找到上传文件”错误提示

ueditor是一个功能十分强大的在线文本编辑器,但是在ssh框架中,确切的说实在struts2中由于其拦截器需要对request,session对象进行重新封装,这个过程中会把request对象中保存的一些内容清空,所以会导致ueditor的上传功能获取不到需要上传的内容导致“未找到上传文件”的错误! 参考网上资料和自己实验,最终的解决思路是,重写struts2中的一个转换的类,然后配置struts2使用我们重写的这个类.由于我们的工程中可能会有其他的上传等功能,为了不影响其他功能的时候,还需

TQ2440实现触摸屏和qt图形 解决segmentation fault

使用触摸屏,首先安装触摸屏矫正程序. 下载并解压tslib-1.4,进入主目录,执行: 1 [[email protected] ~]#./autogen.sh 2 [[email protected] ~]#echo "ac_cv_func_malloc_0_nonnull=yes" >arm-none-linux-gnueabi.cache 3 [[email protected] ~]#./configure --host=arm-linux --cache-file=ar

分享 WebBrowser显示Html内容3点细节技巧,解决刷新后空白

直接显示Html内容,不像直接导航网址容易处理: 问题:按微软的控件属性提示,可以用WebBrowser.DocumentText 属性赋值 ,但是这种赋值,只是首次有效,后续切换都没啥作用. 下面给出自己追求摸索的两点技巧: 1:通过WebBrowser.Document.Write(html)方法来输出html内容显示. 由于WebBrowser 需要经历几个事件后才会显示,直接输出是不行的,为此,需要有点技巧的使用: wbShowBlog.Navigate("about:blank&quo

System.ArgumentException: 给定的端口名称未以 COM/com 开头或未解析为有效的串行端口

问题描述: 程序一直正常运行,今天电脑重做了系统,然后就开始出现了这个问题:“给定的端口名称未以 COM/com 开头或未解析为有效的串行端口”.串口调试助手也用不了.串口线没有问题,也不是硬件问题,程序也没用问题(在别的电脑上正常运行). 异常信息: {System.ArgumentException: 给定的端口名称未以 COM/com 开头或未解析为有效的串行端口. 参数名: portName    在 System.IO.Ports.SerialStream..ctor(String p

腾讯云,体验域名注册解析与SSL证书

体验域名注册解析与SSL证书 购买域名 任务时间:30min ~ 60min 在腾讯云上购买域名 首先需要在腾讯云上购买域名, 点击以下链接可以观看购买操作的指引 如何在腾讯云上购买域名 域名解析 域名购买完成后, 需要将域名解析到此服务器上,此服务器的IP是 <您的 CVM IP 地址> 点击下面的链接观看如何在腾讯云上解析域名 如何在腾讯云上解析域名 检查域名生效 域名设置解析后需要过一段时间才会生效,通过 ping 命令检查域名是否生效,如: ping 你申请解析的子域名 如果 ping

Android实战技巧:深入解析AsyncTask

AsyncTask的介绍及基本使用方法 关于AsyncTask的介绍和基本使用方法可以参考官方文档和Android实战技巧:多线程AsyncTask这里就不重复. AsyncTask引发的一个问题 上周遇到了一个极其诡异的问题,一个小功能从网络上下载一个图片,然后放到ImageView中,是用AsyncTask来实现的,本身逻辑也很简单,仅是在doInBackground中用HTTP请求把图片的输入流取出,然后用BitmapFactory去解析,然后再把得到的Bitmap放到ImageView中

解决vue解析出现闪烁

原因: 在使用vuejs.angularjs开发时,经常会遇见在如Chrome这类能够快速解析的浏览器上出现表达式({{ express }} ),或者是模块(div)的闪烁.对于这个问题由于JavaScript去操作DOM,都会等待DOM加载完成(DOM ready).对于vuejs.angularjs这些会在DOM ready完会才回去解析html view Template,所以对于Chrome这类快速的浏览器你会看见有闪烁的情况出现.而对于IE7,8这类解析稍慢的浏览器大部分情况下是不会

Qt技巧:QProcess与外部程序的调用

项目做到一定阶段,经常需要在原来的工程上调用外部程序.Qt为此提供了QProcess类,QProcess可用于完成启动外部程序,并与之交互通信. 一.启动外部程序的两种方式: (1)一体式:void QProcess::start(const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite) 外部程序启动后,将随主程序的退出而退出. (2)分离式:void QProcess::start