概述
最近工作中需要使用webserver的方式进行登录界面的验证,之前写过一个用winsocket2的,好麻烦,这次决定使用qt了,研究了下,果然简单很多啊。
整体而言,需要关注的类有两个:QNetworkAccessManager和QNetworkReply。话不多说,上代码。
头文件如下,部分有注释:
#ifndef HTTPOPERATOR_H
#define HTTPOPERATOR_H
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
class HttpOperator : public QObject
{
Q_OBJECT
public:
HttpOperator(QObject *parent = 0);
~HttpOperator();
// 实现post方法模拟webserver
void post(QUrl url, const QString& strSend);
// 获取post方法成功后的返回信息
QString getRecv() { return m_strRecv; }
// 获取服务器返回的错误信息
QNetworkReply::NetworkError getLastError(){ return m_error; }
private slots:
void slotFinished(QNetworkReply* reply);
signals:
void signalFinished();
private:
QNetworkAccessManager* m_pNetwork;
QString m_strRecv;
QNetworkReply::NetworkError m_error;
};
#endif // HTTPOPERATOR_H
实现文件如下:
#include "HttpOperator.h"
HttpOperator::HttpOperator(QObject *parent)
: QObject(parent)
{
m_pNetwork = new QNetworkAccessManager;
connect(m_pNetwork, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotFinished(QNetworkReply*)));
}
HttpOperator::~HttpOperator()
{
}
void HttpOperator::post(QUrl url, const QString& strSend)
{
QNetworkRequest request;
request.setUrl(url);
request.setRawHeader("POST", url.path().toUtf8());
request.setRawHeader("Host", url.host().toUtf8());
request.setRawHeader("Content-Type", "application/soap+xml; charset=utf-8");
request.setRawHeader("Content-Length", QString("%1").arg(strSend.length()).toUtf8());
m_pNetwork->post(request, strSend.toUtf8());
}
void HttpOperator::slotFinished(QNetworkReply* reply)
{
QVariant statusCodeV =
reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
QVariant redirectionTargetUrl =
reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
m_error = reply->error();
if (m_error == QNetworkReply::NoError)
{
m_strRecv = QString::fromUtf8(reply->readAll());
}
emit signalFinished();
reply->deleteLater();
}
==================2016-4-07====================
增加一个post的内容以为参考:
QString("<?xml version="1.0" encoding="utf-8"?>"
"<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">"
"<soap12:Body>"
"<Login xmlns="http://tempuri.org/">"
"<loginname>demo</loginname>"
"<password>demo</password>"
"</Login>"
"</soap12:Body>"
"</soap12:Envelope>"
);
最后
以上就是潇洒便当为你收集整理的Qt调用webserver完成登录操作的全部内容,希望文章能够帮你解决Qt调用webserver完成登录操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复