QT调用Restful服务

7 篇文章 0 订阅
1 篇文章 0 订阅
#include "QtTestRestFulDemo.h"
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtCore/QJsonObject>
#include <QtCore/QJsonDocument>

QtTestRestFulDemo::QtTestRestFulDemo(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	connect(ui.pushButton_GET, SIGNAL(clicked()), this, SLOT(OnGETSlot()));
	connect(ui.pushButton_POST, SIGNAL(clicked()), this, SLOT(OnPOSTSlot()));
}

void QtTestRestFulDemo::SendAndGetText(QString strUrl, MyMethod thod, QString strInput, QString &strMessage,QString &strResult)
{

	QNetworkRequest oNetRequest;
	oNetRequest.setUrl(QUrl(strUrl));
	oNetRequest.setRawHeader("Content-Type", "application/octet-stream");
	//oNetRequest.setRawHeader("Content-Type", "application/json");
	//oNetRequest.setRawHeader("Content-Type", "application/xml");
	//oNetRequest.setRawHeader("Content-Type", "application/octet-stream");

	//oNetRequest.setRawHeader("Authorization", "Bearer global-0b9ad652-9671-4cd8-86e9-e1b288dfe1da"); //token时用
	oNetRequest.setRawHeader("CLIENTVERSION", ("V1"));
	//oNetReply = oNetAccessManager.put(oNetRequest, *request.getRequestData());
	//oNetReply = oNetAccessManager.post(oNetRequest, *request.getRequestData());
	//oNetReply = oNetAccessManager.get(oNetRequest);
	//oNetReply = oNetAccessManager.deleteResource(oNetRequest);

	QNetworkAccessManager oNetAccessManager;
	QNetworkReply* oNetReply = NULL;
	QByteArray inputTmp;
	if (thod == POST)
	{
		oNetReply = oNetAccessManager.post(oNetRequest, strInput.toLocal8Bit());
	}
	else if (thod == GET )
	{
		oNetReply = oNetAccessManager.get(oNetRequest);
	}

	QEventLoop loop;
	connect(oNetReply, SIGNAL(finished()), &loop, SLOT(quit()));
	loop.exec();

	//记录httpCode
	int httpsCode = oNetReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
	
	QNetworkReply::NetworkError e = oNetReply->error();
	strResult = oNetReply->readAll();
	if (e)
	{
		strMessage = oNetReply->errorString();
	}
}

void QtTestRestFulDemo::OnPOSTSlot()
{
	//传Json时可以用下列操作
	/*
	QJsonObject oSendObject;
	oSendObject.insert("id1", 1);
	oSendObject.insert("name1", "a");

	QJsonObject oSendObject2;
	oSendObject2.insert("id2", 2);
	oSendObject2.insert("name2", "b");

	int Tmp1 = oSendObject.value("id1").toInt();

	oSendObject.insert("second", oSendObject2);
	int Tmp2 = oSendObject.value("second").toObject().value("id2").toInt();

	if ( oSendObject.contains("name1") )
	{
		int h = 1;
	}

	QJsonDocument doc;
	doc.setObject(oSendObject);
	QByteArray body = doc.toJson();
	QString str = body;
	*/

	QString strMessage;
	QString strResult;
	QString strUrl;
	QString strInput = ui.textEdit_input->toPlainText();
	strUrl += "http://" + ui.lineEdit_Url->text();
	SendAndGetText(strUrl, POST, strInput,strMessage,strResult);
	ui.textEdit_errorMessage->setText(strMessage);
	ui.textEdit_Result->setText(strResult);
}

void QtTestRestFulDemo::OnGETSlot()
{
	QString strMessage;
	QString strResult;
	QString strUrl;
	QString strInput = ui.textEdit_input->toPlainText();
	strUrl += "http://" + ui.lineEdit_Url->text();
	SendAndGetText(strUrl, GET, strInput, strMessage, strResult);
	ui.textEdit_errorMessage->setText(strMessage);
	ui.textEdit_Result->setText(strResult);
}

代码下载地址:https://download.csdn.net/download/u014378771/11452227

GitHub代码下载:https://github.com/xiefgen/QTRestFulDemo.git

代码测试结果:

GET方法测试:

GET方法查下测试

 

POST方法测试:input内容

{"article":{"content":"GET,POST,PUT","id":2,"title":"the way to REST"}}

 

服务器是用Python的flask实现的,代码如下:

from flask import Flask,jsonify,abort,make_response,request,json
app = Flask(__name__)

articles = [
    {
        'id' : 1,
        'title':'the way to pythoon',
        'content':'tuple,list,dict'
    },
    {
        'id' : 2,
        'title':'the way to REST',
        'content':'GET,POST,PUT'
    }
]

@app.route('/api/articles',methods = ['GET'])
def get_articles():
    return jsonify( { 'articles':articles } )

@app.route('/api/articles/<int:article_id>',methods = ['GET'])
def get_article(article_id):
    article = list(filter( lambda a : a['id'] == article_id,articles ))
    return  jsonify({'article':article[0]})

@app.route('/api/json',methods = ['POST'])
def getRequest():
    data = json.loads(request.get_data())
    return data['article']

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8877)

 

  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt Restful服务是指使用Qt框架进行开发的一种符合Restful架构风格的服务Restful是一种基于HTTP协议的一种轻量级的网络服务架构,它能够将网络资源通过URL进行统一的访问和操作。 Qt是一款跨平台的C++开发框架,有着丰富的网络编程支持,使得开发者能够便捷地实现Restful服务Qt提供了一系列的网络类,如QNetworkAccessManager,QNetworkRequest,QNetworkReply等,以及方便的信号与槽机制,可以与服务器进行数据交互。 开发Qt Restful服务需要注意以下几点: 1. 定义Restful接口:根据业务需求,定义好资源的URL、请求方法、请求参数等细节,符合Restful规范。 2. 使用QNetworkAccessManager发送网络请求:根据需要,使用QNetworkRequest进行请求的设置,发送网络请求,获取服务器返回的数据。 3. 解析服务器响应:根据服务器返回的数据格式(如JSON或XML),使用Qt提供的JSON解析库或XML解析库对数据进行解析,提取所需信息。 4. 处理业务逻辑:根据业务需求,对服务器返回的数据进行处理,更新UI界面或进行其他操作。 5. 错误处理:处理网络请求过程中可能出现的错误,如网络不可用、请求超时等,以提高用户体验。 Qt Restful服务具有跨平台的优势,可以在不同的操作系统上运行,如Windows、Linux、MacOS等。开发者可以基于Qt框架进行快速的开发和部署。 总之,Qt Restful服务是使用Qt框架开发的一种符合Restful架构风格的网络服务,具有方便、跨平台等特点,使得开发者可以轻松地实现网络服务的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值