Qt5 http/HTTPS访问 以及JSON解析的实用
实用QT5访问HTTP/以及HTTPS协议访问
并且调用Json解析
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QUrl>
#include <QDebug>
#include <QByteArray>
#include <QSslConfiguration>
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonValue>
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 = -;
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();
}
}
}
运行结果

Qt5 http/HTTPS访问 以及JSON解析的实用的更多相关文章
- 自定义Json解析工具
此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...
- C# Newtonsoft.Json解析数组的小例子[转]
https://blog.csdn.net/Sayesan/article/details/79756738 C# Newtonsoft.Json解析数组的小例子 http://www.cnblog ...
- Flutter网络请求与JSON解析
本文介绍如何在Flutter中创建HTTP网络请求和对请求的json string进行类型解析. 网络请求 官方使用的是用dart io中的HttpClient发起的请求,但HttpClient本身功 ...
- C++的Json解析库:jsoncpp和boost(转)
原文转自 http://blog.csdn.net/hzyong_c/article/details/7163589 JSON(JavaScript Object Notation)跟xml一样也是一 ...
- JSON解析工具-org.json使用教程
转自:http://www.open-open.com/lib/view/open1381566882614.html 一.简介 org.json是Java常用的Json解析工具,主要提供JSONO ...
- Java:JSON解析工具-org.json
一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...
- dotnet 手动解决 json 解析中不合法字符串
如果使用 Newtonsoft Json 解析字符串,字符串里面有不清真的格式,那么默认的解析将会炸掉.如果想要自己解决字符串中的不清真格式,可以使用传入 JsonSerializerSettings ...
- Windows下Nginx配置SSL实现Https访问(包含证书生成)
Vincent.李 Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...
- Json解析工具的选择
前言 前段时间@寒江不钓同学针对国内Top500和Google Play Top200 Android应用做了全面的分析(具体分析报告见文末的参考资料),其中有涉及到对主流应用使用json框架Gson ...
随机推荐
- PHPExcel 设置表格边框
//设置单元格边框 $style_array = array( 'borders' => array( 'allborders' => array( 'style' => \PHPE ...
- Linux 网络原理及基础设置
临时配置网络(ip,网关,dns)+永久配置 设置IP和掩码 ifconfig eth0 192.168.2.2 netmask 255.255.255.0 设置网关route add default ...
- 从DataTable中删除不被控件支持的字段类型
DataTable dt = DB.GetDataTable(sql); //从dt中删除不被控件支持的字段类型 for (int ...
- @topcoder - SRM611D1L3@ ElephantDrinking
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定有一个 n*n 的平原,其中一些格子有些泉水.泉水每单位时间 ...
- 实验4 JavaBean创建和使用(计算器)
实验4 JavaBean创建和使用 一.实验目的 1.掌握JavaBean创建和使用方法: 2.领会JavaBean简化页面设计的优势等. 二.实验内容 1.设计诸如以下页面的简单计算器 要求:完成 ...
- C++ 第四次作业 继承
继承 继承时从新的类从已有类那里得到新的特征.继承实现了代码的重用,极大地减少了代码量,同时通过新增成员,加入了自身的独有特性,达到了程序的扩充. 派生类继承了基类的全部数据类和除了构造函数.析构函数 ...
- poj 2442 Sequence (Priority Queue)
2442 -- Sequence 真郁闷,明明方法是对的,为什么我的代码老是那么的慢._(:з」∠)_ 这题要想考虑两列的情况,然后逐列拓展. 代码如下: #include <cstdio> ...
- oracle 使用显式的游标(CURSORs)
使用隐式的游标,将会执行两次操作. 第一次检索记录, 第二次检查TOO MANY ROWS 这个exception . 而显式游标不执行第二次操作.
- JavaScript中判断整数的方法
一.使用取余运算符判断 任何整数都会被1整除,即余数是0.利用这个规则来判断是否是整数. 1 2 3 4 5 function isInteger(obj) { return obj%1 == ...
- mybatis 逆向工程(通过数据库表针对单表自动生成mybatis执行所需要的代码)
mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.mapper.xml.pojo…),可以让程序员 ...