QNetworkAccessManager来发送请求,QNetworkRequest 设置HTTP报文,QNetworkReply 接收请求结果
服务器端 PHP代码:
<?php
$test = $_POST['a'];
echo $test;
?>
post请求方式1:使用QNetworkAccessManager::finished信号接收结果
#include "qmlclass.h"
#include<QIODevice>
#include<QDebug>
#include<QNetworkReply>
QmlClass::QmlClass(QObject *parent) : QObject(parent)
{
QByteArray data;
m_netManger = new QNetworkAccessManager(this);
QNetworkRequest network_request;
data.append("a=250");
network_request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
network_request.setHeader(QNetworkRequest::ContentLengthHeader, data.length());
network_request.setUrl(QUrl("http://localhost/mycode/Test/index.php"));
connect(m_netManger, &QNetworkAccessManager::finished, this, [=](QNetworkReply *reply) {
QNetworkRequest ss=reply->request();
QByteArray t =reply->readAll();
qDebug()<<"POST返回"<<t;
});
QNetworkReply *reply2=m_netManger->post(network_request, data);
connect(reply2,&QNetworkReply::readyRead,this,[=](){
QByteArray t =reply2->readAll();
qDebug()<<"POST返回"<<t;
});
}
POST返回 "250"
post请求方式1有很大不足,若有多次post或者get,无法区分是哪个post或者get返回的结果,因为异步的原因,这变的很蛋疼,这时候还有一种方式,把信号用在QNetworkReply 中
QmlClass::QmlClass(QObject *parent) : QObject(parent)
{
QByteArray data;
m_netManger = new QNetworkAccessManager(this);
QNetworkRequest network_request;
data.append("a=250");
network_request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
network_request.setHeader(QNetworkRequest::ContentLengthHeader, data.length());
network_request.setUrl(QUrl("http://localhost/mycode/Test/index.php"));
QNetworkReply *reply2=m_netManger->post(network_request, data);
connect(reply2,&QNetworkReply::readyRead,this,[=](){
QByteArray t =reply2->readAll();
qDebug()<<"reply2 POST返回"<<t;
});
QNetworkReply *reply3=m_netManger->post(network_request, "a=5");
connect(reply3,&QNetworkReply::readyRead,this,[=](){
QByteArray t =reply3->readAll();
qDebug()<<"reply3 POST返回"<<t;
});
}
reply2 POST返回 "250"
reply3 POST返回 "5"