stevenyao

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  22 随笔 :: 1 文章 :: 67 评论 :: 0 Trackbacks
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使用的连接方式。
posted on 2009-12-11 13:51 姚冬 阅读(9001) 评论(2)  编辑 收藏 引用

评论

# re: 用 Qt 访问 https 2009-12-12 13:13 99书城网
包括了代理和缓冲的支持,所以这也是QT webkit使用的连接方式。
  回复  更多评论
  

# re: 用 Qt 访问 https 2013-02-26 11:33 王牌软件
http://qt-project.org/faq/answer/how_can_i_add_ssl_support_to_my_qt_application  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理