Qt 访问 https

作者: admin 分类: Qt Gui 发布时间: 2013-02-26 11:29 ė5,577 浏览数 6没有评论
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)

Qt 是支持 SSL的,但是由于某些法律和政策因素,QT的开发包里并没有集成openSSL。QT采用两种方式调用openSSL,默认方式是动态加载openSSL的 DLL。 在Windows系统上默认没有openSSL,需要自己安装。 可以在这里下载源代码,自己编译

http://www.openssl.org/source/

也可以在这里下载编译好的版本,直接安装 http://www.slproweb.com/products/Win32OpenSSL.html
如果要静态链接ssl,那就要自己重新编译QT才行,首先设置环境变量 OPENSSL_LIBS,指向你的openSSL的lib目录,然后执行configure的时候使用以下参数 configure -openssl-linked
使用方法和简单和普通的 http请求没什么不同。

QUrl url(http://code.google.com”); QHttp *http = new QHttp(); http->setHost(url.host(), QHttp::ConnectionModeHttps, url.port()); QFile *file = new QFile(“index.htm”); file->open(QIODevice::WriteOnly) int httpGetId = http->get(path, file);

由于QHttp是异步调用,你需要连接几个signal来获取下载进度。
在S60平台,以上代码也是可以运行的,需要注意的是在 Qt 4.6 beta版本里我怀疑有个bug,qt会在s60上试图去加载 ssleay32.dll,但是在s60上openSSL的DLL名字是 libssl.dll。这个问题已经在最新的 QT 4.6 正式版本里修复了,请更新到最新的QT. 另外,如果以上代码在 S60上运行,这个 index.htm文件会被创建在程序的私有目录里,这个目录是文件管理器看不到的,所以要改成 类似 c:\index.htm的名字,好用来验证下载是否正确。
现在的 QT 其实并不推荐继续使用 QHttp了,应该用 QNetworkAccessManager,这是一个更先进的网络连接服务,其行为和你的浏览器基本一致,包括了代理和缓冲的支持,所以这也是QT webkit使用的连接方式。

在windows下面我用Qt 访问https的服务器的时候开始也不行,后面我下载了一个Win32OpenSSL_Light-1_0_1c将libeay32.dll和ssleay32.dll放到Qt的bin目录下面去就支持了

测试例子examplesnetworkhttp

http://stackoverflow.com/questions/5630512/support-for-https-using-qnetworkaccessmanager-hitting-sslerrors-at-runtime

 



只回答业务咨询点击这里给我发消息 点击这里给我发消息

学习日记,兼职软件设计,软件修改,毕业设计。

本文出自 学习日记,转载时请注明出处及相应链接。

本文永久链接: https://www.softwareace.cn/?p=202

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">


Ɣ回顶部

无觅相关文章插件,快速提升流量