我是靠谱客的博主 潇洒便当,最近开发中收集的这篇文章主要介绍Qt调用webserver完成登录操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近工作中需要使用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完成登录操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部