Qt不只是界面库,Qt提供了功能丰富的C++类库,比如网络编程等,最近有新手java人员想知道qt怎么获取https的json?那么下面我们就来给大家分享一些这方面的知识。
实用QT5访问HTTP/以及HTTPS协议访问并且调用Json解析:
#include "mywidget.h" #include "ui_mywidget.h" #include #include #include #include #include #include #include #include MyWidget::MyWidget(QWidget * parent): QWidget(parent) , ui(new Ui::MyWidget) { ui - > setupUi(this); QUrl url; m_AccessManager = new QNetworkAccessManager(this); url.setUrl("http://ip.taobao.com/service/getIpInfo2.php"); QSslConfiguration config; config.setPeerVerifyMode(QSslSocket::VerifyNone); config.setProtocol(QSsl::TlsV1SslV3); m_Request.setSslConfiguration(config); m_Request.setUrl(url); QByteArray sendData; sendData = QString::fromStdString("ip=27.106.204.0") .toLocal8Bit(); m_Request.setRawHeader("Accept", "*/*"); m_Request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.9"); m_Request.setRawHeader("Content-Type", "application/x-www-form-urlencoded"); m_Request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"); m_Request.setRawHeader("X-Requested-With:", "XMLHttpRequest"); m_Request.setRawHeader("Referer", "http://ip.taobao.com/ipSearch.html"); m_Reply = m_AccessManager - > post(m_Request, sendData); connect(m_AccessManager, & QNetworkAccessManager::finished, this, & MyWidget::ReplyReadFunc); } MyWidget::~MyWidget() { delete ui; } void MyWidget::ReplyReadFunc(QNetworkReply * Reply) { int NetworkErrors = -1; NetworkErrors = Reply - > error(); QString ip; QString country; QString region; QString isp; if (NetworkErrors == QNetworkReply::NoError) { QByteArray databuff = Reply - > readAll(); QString result = QString::fromStdString(databuff.toStdString()) .toUtf8(); QJsonDocument document; QJsonParseError ParseError; document = QJsonDocument::fromJson(result.toUtf8(), & ParseError); if (!document.isNull() && ParseError.error == QJsonParseError::NoError) { if (document.isObject()) { QJsonObject Object = document.object(); //获取文档对象 if (!Object.isEmpty()) { if (Object.contains("data")) //先判断有没有 { QJsonValue dataObj = Object.value("data"); if (dataObj.isObject()) //判断是否是对象 { QJsonObject ObjectData = dataObj.toObject(); if (ObjectData.contains("ip")) { QJsonValue ipVal = ObjectData.value("ip"); if (ipVal.isString()) { ip = ipVal.toString(); } } if (ObjectData.contains("region")) { QJsonValue regionVal = ObjectData.value("region"); if (regionVal.isString()) { region = regionVal.toString(); } } if (ObjectData.contains("isp")) { QJsonValue ispVal = ObjectData.value("isp"); if (ispVal.isString()) { isp = ispVal.toString(); } } } } } } country += "您的ip:" + ip; country += "所在城市:" + region; country += "运营商:" + isp; qDebug() << country.tostdstring() .c_str(); < p = "" > } } }
qt有什么优点?
1、优良的跨平台特性。
Qt支持下列操作系统:Microsoft Windows 95/98、Microsoft Windows NT、Linux、Solaris、SunOS、HP-UX、Digital UNIX (OSF/1、Tru64)、Irix、FreeBSD、BSD/OS、SCO、AIX、OS390和QNX等。
2、面向对象。
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。
3、丰富的API。
Qt包括多达250个以上的C++类,还提供基于模板的collections、serialization、file、I/O device、directory management和date/time类。甚至还包括正则表达式的处理功能。
4、支持2D/3D图形渲染,支持OpenGL。
5、大量的开发文档。
6、XML支持。但是真正使得Qt在自由软件界的众多Widgets(如Lesstif、Gtk、EZWGL、Xforms及fltk等)中脱颖而出的还是基于Qt的重量级软件KDE。Qt虽然是商业公司的产品,但是走的却是开源路线,提供免费下载,全部都是开放源代码,非商业用途亦采用GPL的版权宣告,著名的Open Source"KDE"项目便是采用Qt开发的。
Qt作为跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。在获取https的json时候,大家参考以上的做法就可以了,最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。
推荐阅读: