与get请求类似,发送请求:manager->post(request, dataArray);
1. 程序
widge.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QtNetwork/QNetworkRequest>
#include<QtNetwork/QNetworkReply>
#include<QtNetwork/QNetworkAccessManager>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
void post();
void postBack(QNetworkReply* reply);
private:
Ui::Widget *ui;
QNetworkAccessManager * manager;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<QJsonObject>
#include<QJsonDocument>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
manager = new QNetworkAccessManager(this);
connect(manager,&QNetworkAccessManager::finished,this,&Widget::postBack);//通信完成后,自动执行getBack
post();
}
Widget::~Widget()
{
delete ui;
}
void Widget::post()
{
// Json数据
QJsonObject json;
json.insert("User", "admin");
json.insert("Password", "admin");
QJsonDocument document;
document.setObject(json);
QByteArray dataArray = document.toJson(QJsonDocument::Compact);
// // 表单数据
// QByteArray dataArray;
// dataArray.append("username=admin&");
// dataArray.append("password=admin");
// 构造请求
QNetworkRequest request;
/*httpbin.org 这个网站能测试 HTTP 请求和响应的各种信息,比如 cookie、ip、headers 和登录验证等,且支持 GET、POST 等多种方法,对 web 开发和测试很有帮助。*/
request.setUrl(QUrl("http://httpbin.org/post"));
//request.setUrl(QUrl("http://10.181.218.209:8080/login"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
//request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
// 发送请求
manager->post(request, dataArray);
}
void Widget::postBack(QNetworkReply* reply)
{
//qDebug()<<reply->readAll().data(); //输出所有响应内容
// 获取响应信息
QByteArray bytes = reply->readAll();
QJsonParseError jsonError;
QJsonDocument doucment = QJsonDocument::fromJson(bytes, &jsonError);
if (jsonError.error != QJsonParseError::NoError) {
qDebug() << QStringLiteral("解析Json失败");
return;
}
// 解析Json
if (doucment.isObject())
{
QJsonObject obj = doucment.object();
QJsonValue value;
if (obj.contains("data"))
{
value = obj.take("data");
if (value.isString())
{
QString data = value.toString();
qDebug() << data;
}
}
}
}
2. 运行结果
以json格式输出所有响应
{
"args": {},
"data": "{\"Password\":\"admin\",\"User\":\"admin\"}",
"files": {},
"form": {},
"headers": {
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,en,*",
"Content-Length": "35",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0",
"X-Amzn-Trace-Id": "Root=1-610cbe53-78d0d6050b7ea1ef339a24e5"
},
"json": {
"Password": "admin",
"User": "admin"
},
"origin": "202.200.238.173",
"url": "http://httpbin.org/post"
}
仅输出响应中的"data"
"{\"Password\":\"admin\",\"User\":\"admin\"}"