Qt 调用webService 接口
来源:互联网 发布:淘宝店铺滚动公告代码 编辑:程序博客网 时间:2024/06/06 18:47
一,头文件
#include <QTimer>
#include <QThread>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
class NetDataListenerThread:public QThread
{
Q_OBJECT
public:
NetDataListenerThread(QNetworkAccessManager *manager,QNetworkReply * reply,int timeoutms,QObject *parent = 0);
~NetDataListenerThread();
QByteArray getBa() const;
bool getIsWaitTimeOut() const;
protected:
virtual void run();
private:
bool waitForConnect();
protected slots:
void slot_waitTimeout();
signals:
void sig_waitTimeout();
private:
QNetworkAccessManager *mManager;
int m_TimeOutms;
bool m_waitTimeOut;
bool m_isWaitTimeOut;
QNetworkReply * m_reply;
};
/**
* @brief The WebServiceHelp class webservice调用帮助类
* @author zp
*/
class WebServiceHelp:public QObject
{
Q_OBJECT
private:
class Dispose
{
public:
~Dispose();
};
public:
static WebServiceHelp * getInstance();
public:
/**
* @brief sendGetRequest 发送Get请求
* @param urlStr url
* @param ba 返回数据
* @param timeOutms 超时时间
* @return 返回错误代码
*/
QNetworkReply::NetworkError sendGetRequest(QString urlStr, QByteArray & ba, int timeOutms=1000);
/**
* @brief sendPostRequest 发送post请求
* @param website 网址
* @param methodName 方法名称
* @param param 参数
* @param postBa post数据
* @param code 返回代码
* @param message 返回信息
* @param data 返回数据
* @param timeOutms 超时时间
* @return 返回错误代码
*/
QNetworkReply::NetworkError sendPostRequest(QString website,const QByteArray & postBa, QByteArray& retBa, int timeOutms=1000);
protected slots:
void slot_error(QNetworkReply::NetworkError code);
private:
static WebServiceHelp * serverHelp;
static WebServiceHelp::Dispose disp;
QNetworkAccessManager *manager;
QNetworkReply::NetworkError m_errCode;
private:
WebServiceHelp(QObject *parent=0);
~WebServiceHelp();
};
二,源文件
NetDataListenerThread::NetDataListenerThread(QNetworkAccessManager *manager, QNetworkReply *reply, int timeoutms, QObject *parent)
:QThread(parent),mManager(manager),m_TimeOutms(timeoutms),m_reply(reply)
{
m_waitTimeOut = false;
m_isWaitTimeOut = false;
}
NetDataListenerThread::~NetDataListenerThread()
{
}
void NetDataListenerThread::run()
{
m_isWaitTimeOut = waitForConnect();
}
bool NetDataListenerThread::waitForConnect()
{
QEventLoop eventLoop;
QTimer * timer = NULL;
m_waitTimeOut = false;
bool bWaitTimeOut = false;
if (m_TimeOutms > 0)
{
timer = new QTimer;
connect(timer, SIGNAL(timeout()), this, SLOT(slot_waitTimeout()));
timer->setSingleShot(true);
timer->start(m_TimeOutms);
connect(this, SIGNAL(sig_waitTimeout()), &eventLoop, SLOT(quit()));
}
connect(mManager, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
if (m_reply != NULL)
{
connect(m_reply, SIGNAL(readyRead()), &eventLoop, SLOT(quit()));
}
eventLoop.exec();
if (timer != NULL)
{
timer->stop();
delete timer;
timer = NULL;
}
bWaitTimeOut = m_waitTimeOut;
m_waitTimeOut = false;
return !bWaitTimeOut;
}
void NetDataListenerThread::slot_waitTimeout()
{
m_waitTimeOut = true;
emit sig_waitTimeout();
}
bool NetDataListenerThread::getIsWaitTimeOut() const
{
return m_isWaitTimeOut;
}
WebServiceHelp * WebServiceHelp::serverHelp = NULL;
WebServiceHelp::Dispose WebServiceHelp::disp;
WebServiceHelp::WebServiceHelp(QObject *parent):QObject(parent)
{
manager = new QNetworkAccessManager();
m_errCode= QNetworkReply::NoError;
}
WebServiceHelp::~WebServiceHelp()
{
manager->deleteLater();
}
WebServiceHelp *WebServiceHelp::getInstance()
{
if(serverHelp==NULL)
{
serverHelp = new WebServiceHelp();
}
return serverHelp;
}
QNetworkReply::NetworkError WebServiceHelp::sendGetRequest(QString urlStr, QByteArray & ba,int timeOutms)
{
QNetworkReply::NetworkError retError = QNetworkReply::NoError;
m_errCode= QNetworkReply::NoError;
QNetworkRequest request;
QUrl url(urlStr);
request.setUrl(url);
QNetworkReply *reply = manager->get(request);
connect(reply,static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error),this,&WebServiceHelp::slot_error);
QEventLoop eventLoop;
NetDataListenerThread * thread = new NetDataListenerThread(manager,reply,timeOutms);
connect(thread, &NetDataListenerThread::finished,&eventLoop,&QEventLoop::quit);
thread->start();
eventLoop.exec();
if(thread->getIsWaitTimeOut())
{
ba = reply->readAll();
}
else
{
m_errCode=QNetworkReply::TimeoutError;
}
thread->deleteLater();
delete reply;
delete thread;
thread = NULL;
retError = m_errCode;
m_errCode= QNetworkReply::NoError;
return retError;
}
QNetworkReply::NetworkError WebServiceHelp:: sendPostRequest(QString website, const QByteArray &postBa, QByteArray &retBa, int timeOutms)
{
QString urlStr =website;
QNetworkReply::NetworkError retError = QNetworkReply::NoError;
m_errCode= QNetworkReply::NoError;
QNetworkRequest request;
QSslConfiguration config;
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::TlsV1SslV3);
request.setSslConfiguration(config);
QUrl url(urlStr);
request.setUrl(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
request.setHeader(QNetworkRequest::ContentLengthHeader,postBa.length());
QNetworkReply *reply = manager->post(request,postBa);
connect(reply,static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error),this,&WebServiceHelp::slot_error);
QEventLoop eventLoop;
NetDataListenerThread * thread = new NetDataListenerThread(manager,reply,timeOutms);
connect(thread, &NetDataListenerThread::finished,&eventLoop,&QEventLoop::quit);
thread->start();
eventLoop.exec();
if(thread->getIsWaitTimeOut())
{
retBa = reply->readAll();
}
else
{
m_errCode=QNetworkReply::TimeoutError;
}
thread->deleteLater();
delete reply;
delete thread;
thread = NULL;
retError = m_errCode;
m_errCode= QNetworkReply::NoError;
return retError;
}
void WebServiceHelp::slot_error(QNetworkReply::NetworkError code)
{
m_errCode = code;
}
WebServiceHelp::Dispose::~Dispose()
{
if(WebServiceHelp::serverHelp!=NULL)
{
delete WebServiceHelp::serverHelp;
WebServiceHelp::serverHelp=NULL;
}
}
三,调用
(1),get请求
QNetworkReply::NetworkError ret=WebServiceHelp::getInstance()->sendGetRequest(url,ba);
if(ret==QNetworkReply::NoError)
{
return QString(ba);
}
else
{
return "NetworkError";
}
(2) post请求
QByteArray retBa;QNetworkReply::NetworkError ret=WebServiceHelp::getInstance()->sendPostRequest(webSite,postBa,retBa);qDebug()<<"ret.errorString();"<<ret;if(ret==QNetworkReply::NoError){
return QString(retBa);}
else{
return "NetworkError";}
0 0
- Qt 调用webService 接口
- qt使用gsoap调用webservice接口
- 【webservice】调用webservice接口
- Qt调用WebService - WebService原理
- Qt+gsoap调用WebService
- Qt调用WebService
- Qt调用WebService 1
- Qt调用WebService 2
- Qt调用WebService 3
- Qt调用WebService 4
- Qt+gsoap调用WebService
- Qt+gsoap调用WebService
- Qt+gsoap调用WebService
- domino 调用 WebService 接口
- WebService 接口调用指南
- php 调用webservice接口!!
- Java WebService 接口调用
- java调用webservice 接口
- 传统工业制造商Opto 22宣布加入Linux基金会
- MYSQL 引擎详解
- 微信小程序笔记
- IMWeb训练营作业-Vue.js-select下拉菜单
- Android开发-网络状态监测-AndroidStudio
- Qt 调用webService 接口
- Spring data redis-StringRedisTemplate 用法
- 常用的23种设计模式
- Java项目命名规范
- MySQL的安装及基本使用
- Litepal
- R语言学习博客
- gnuplot画图
- oracle11g的七个服务