Qt http post方法
注意一:发送Json格式时,需要设置setHeader(QNetworkRequest::ContentTypeHeader, "application/json")
注意二:post请求发送之后需要增加QEventLoop
httpRequest.pro
pro文件中添加Qt+=network
httprequest.h
#ifndef HTTPREQUEST_H
#define HTTPREQUEST_H
#include <QDialog>
#include <QNetworkReply>
QT_BEGIN_NAMESPACE
namespace Ui
{
class HttpRequest;
}
QT_END_NAMESPACE
class HttpRequest : public QDialog
{
Q_OBJECT
public:
HttpRequest( QWidget *parent = nullptr );
~HttpRequest();
public slots:
QString recvPost( QNetworkReply *reply );
private:
QString mRequestHeader = "http://192.168.3.159:8083//user/login"; // ip+port+url
QString mFullRequest; //访问URL
Ui::HttpRequest *ui;
private:
void postRequest( QString key, QString data );
};
#endif // HTTPREQUEST_H
httprequest.cpp
#include "httprequest.h"
#include "ui_httprequest.h"
#include <QDebug>
#include <QEventLoop>
#include <QJsonDocument>
#include <QJsonObject>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
HttpRequest::HttpRequest( QWidget *parent )
: QDialog( parent )
, ui( new Ui::HttpRequest )
{
ui->setupUi( this );
mFullRequest = mRequestHeader;
postRequest( "admin", "admin" );
}
HttpRequest::~HttpRequest()
{
delete ui;
}
QString HttpRequest::recvPost( QNetworkReply *reply )
{
QByteArray array = reply->readAll();
QJsonParseError jsonError;
QJsonDocument jsonDoc( QJsonDocument::fromJson( array, &jsonError ) );
if ( jsonError.error != QJsonParseError::NoError ) {
return 0;
}
QJsonObject obj = jsonDoc.object();
qDebug() << obj;
// ui->textEdit->setHtml( array );
return QString( array );
}
void HttpRequest::postRequest( QString key, QString data )
{
//传入josn
QJsonObject jsondata;
jsondata.insert( "user_id", key );
jsondata.insert( "user_password", data );
QJsonDocument document;
document.setObject( jsondata );
QByteArray array = document.toJson( QJsonDocument::Compact );
QNetworkRequest requestPost; // Post请求URL
**requestPost.setHeader( QNetworkRequest::ContentTypeHeader, "application/json" ); //发送Json格式**
QNetworkAccessManager *manager = new QNetworkAccessManager( this ); // get,post请求
connect( manager, &QNetworkAccessManager::finished, this, &HttpRequest::recvPost );
requestPost.setUrl( QUrl( mFullRequest ) );
QNetworkReply *reply = manager->post( requestPost, array );
QEventLoop loop;
**connect( reply, &QNetworkReply::finished, &loop, &QEventLoop::quit );**
loop.exec();
}