#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->Btn_Get, SIGNAL(clicked()), this, SLOT(OnGETSlot()));
connect(ui->Btn_Post, SIGNAL(clicked()), this, SLOT(OnPOSTSlot()));
// oNetAccessManager = new QNetworkAccessManager();
// connect(oNetAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(Slot_Finished(QNetworkReply*)));
}
MainWindow::~MainWindow()
{
delete ui;
}
//
//现在是用python 创建了一个服务器 http://127.0.0.1:8877/api/articles
//引用传递 send and get
void MainWindow::SendAndGetText(QString strUrl, MyMethod thod, QString strInput, QString &strMessage,QString &strResult)
{
// QNetworkRequest oNetRequest;
// oNetRequest.setUrl(QUrl(strUrl));
// oNetRequest.setRawHeader("Content-Type", "application/octet-stream");
// oNetRequest.setRawHeader("CLIENTVERSION", ("V1"));
// QNetworkAccessManager oNetAccessManager;
// QNetworkReply* oNetReply = NULL;
// QByteArray inputTmp;
// if (thod == POST)
// {
// oNetReply = oNetAccessManager.post(oNetRequest, strInput.toLocal8Bit());
// }
// else if (thod == GET )
// {
// oNetReply = oNetAccessManager.get(oNetRequest);
// }
//同步
// QEventLoop loop;
// connect(oNetReply, SIGNAL(finished()), &loop, SLOT(quit()));
// loop.exec();
// //记录httpCode
// int httpsCode = oNetReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
// qDebug()<<"httpCode"<<httpsCode;
// QNetworkReply::NetworkError e = oNetReply->error();
// strResult = oNetReply->readAll();
// if (e)
// {
// strMessage = oNetReply->errorString();
// }
QNetworkRequest oNetRequest;
oNetRequest.setUrl(QUrl(strUrl));
oNetRequest.setRawHeader("Content-Type", "application/octet-stream");
oNetRequest.setRawHeader("CLIENTVERSION", ("V1"));
//异步
QNetworkAccessManager* oNetAccessManager;
oNetAccessManager = new QNetworkAccessManager();
connect(oNetAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(Slot_Finished(QNetworkReply*)));
QByteArray inputTmp;
if (thod == POST)
{
oNetAccessManager->post(oNetRequest, strInput.toLocal8Bit());
}
else if (thod == GET )
{
oNetAccessManager->get(oNetRequest);
}
}
void MainWindow::OnPOSTSlot()
{
//传Json时可以用下列操作
/*
QJsonObject oSendObject;
oSendObject.insert("id1", 1);
oSendObject.insert("name1", "a");
QJsonObject oSendObject2;
oSendObject2.insert("id2", 2);
oSendObject2.insert("name2", "b");
int Tmp1 = oSendObject.value("id1").toInt();
oSendObject.insert("second", oSendObject2);
int Tmp2 = oSendObject.value("second").toObject().value("id2").toInt();
if ( oSendObject.contains("name1") )
{
int h = 1;
}
QJsonDocument doc;
doc.setObject(oSendObject);
QByteArray body = doc.toJson();
QString str = body;
*/
QString strMessage;
QString strResult;
QString strUrl;
QString strInput = ui->Ted_Input->toPlainText();
strUrl = ui->Led_http->text();
SendAndGetText(strUrl, POST, strInput,strMessage,strResult);
ui->Ted_EM->setText(strMessage);
ui->Ted_Result->setText(strResult);
}
void MainWindow::Slot_Finished(QNetworkReply *reply)
{
qDebug()<<"here!!!";
//记录httpCode
int httpsCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug()<<"httpCode"<<httpsCode;
QNetworkReply::NetworkError e = reply->error();
QString strResult = reply->readAll();
QString strMessage;
if (e)
{
strMessage = reply->errorString();
}
qDebug()<<strResult<<"\t"<<strMessage;
}
void MainWindow::OnGETSlot()
{
QString strMessage;
QString strResult;
QString strUrl;
QString strInput = ui->Ted_Input->toPlainText();
strUrl += ui->Led_http->text();
SendAndGetText(strUrl, GET, strInput, strMessage, strResult);
ui->Ted_EM->setText(strMessage);
ui->Ted_Result->setText(strResult);
}
同步
void NetWorkHelper::GETFromApi(QString strUrl, QString &errorMessage, QString &replyStr)
{
QNetworkRequest NetRequest;
NetRequest.setUrl(QUrl(strUrl));
NetRequest.setRawHeader("Content-Type", "application/json");
NetRequest.setRawHeader("CLIENTVERSION", ("V1"));
QNetworkAccessManager NetAccessManager;
NetAccessManager.setNetworkAccessible(QNetworkAccessManager::Accessible); //遇到 device not open bug 添加
QNetworkReply* NetReply = NULL;
//https 添加以下
QSslConfiguration config;
QSslConfiguration conf = NetRequest.sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
conf.setProtocol(QSsl::TlsV1SslV3);
NetRequest.setSslConfiguration(conf);
NetReply = NetAccessManager.get(NetRequest);
QEventLoop loop;
connect(NetReply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
//exec()之前语句会一直处于运行中,直到QEventLoop退出 实现控制程序运行进程 让replay接收完成再做处理
//qDebug()<<"out3:"<<NetReply->header(QNetworkRequest::KnownHeaders::ContentTypeHeader);
//记录httpCode
int httpsCode = NetReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if(httpsCode != 200)
qDebug()<<"httpCode:"<<httpsCode;
QNetworkReply::NetworkError e = NetReply->error();
replyStr = NetReply->readAll();
if (e)
{
errorMessage = NetReply->errorString();
qDebug()<<"errorMessage:"<<errorMessage;
}
}