Qt——网络编程之post请求

这篇博客展示了如何在Qt环境中实现POST请求并解析返回的JSON数据。通过创建QNetworkAccessManager对象,设置请求头和数据,然后发送POST请求到'http://httpbin.org/post',最终获取并解析了包含用户名和密码的JSON响应。
摘要由CSDN通过智能技术生成

与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\"}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值