PDA

View Full Version : Post some data onto the local server by QNetworkAccessManager(Qt5)



stereoMatching
9th March 2014, 11:52
Trying to post the paramaters onto the server but have no avail(following is my folder)

My file resides(my local host == C:\wamp\www)
https://farm4.staticflickr.com/3544/13031140143_56ff858f14_c.jpg

bridge.html


<html>
<form action="general_query.php" method="post">
<input type="text" name="db_server">
<input type="text" name="db_user">
<input type="text" name="db_password">
<input type="text" name="db_database">
<input type="text" name="query_message">
</form>
</html>


general_query.php


<?php

$response = array();
$response["server"] = _$POST['db_server'];
$response["user"] = _$POST['db_user'];
$response["password"] = _$POST['db_password'];
$response["db"] = _$POST['db_database'];
$response["query_message"] = _$POST['query_message'];
echo($response);
?>


main.cpp


#include "MainWindow.hpp"
#include <QApplication>

#include <QDebug>
#include <QByteArray>
#include <QEventLoop>
#include <QNetworkReply>
#include <QTextCodec>
#include <QUrl>
#include <QUrlQuery>

int main(int argc, char *argv[])
{

QNetworkRequest request("http://127.0.0.1/bridge/bridge.html");
request.setHeader(QNetworkRequest::ContentTypeHead er,
"application/x-www-form-urlencoded");

QUrlQuery query;
query.addQueryItem("db_database", "a");
query.addQueryItem("db_password", "b");
query.addQueryItem("db_server", "c");
query.addQueryItem("db_user", "d");
query.addQueryItem("query_message", "e");

QUrl post_data;
post_data.setQuery(query);

QNetworkAccessManager network_manager;
auto network_reply = network_manager.post(request,
query.query().toUtf8());

QEventLoop loop;
connect(network_reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();

QByteArray raw_data;
if(network_reply->error() == QNetworkReply::NoError){
raw_data = network_reply->readAll();
}else{
qDebug()<<network_reply->errorString();
}

qDebug()<<QTextCodec::codecForHtml(raw_data)->toUnicode(raw_data);

}


The results are same as the texts of the bridge.html but not the json as I expected

expected results


{
"server": "c"
"user": "d"
"password": "b"
"db": "a"
"query message": "e"
}

anda_skoa
9th March 2014, 12:46
Shouldn't your query URL be the PHP script?

I.e. instead of


QNetworkRequest request("http://127.0.0.1/bridge/bridge.html");

using


QNetworkRequest request("http://127.0.0.1/bridge/general_query.php");


Cheers,
_

stereoMatching
10th March 2014, 00:13
Shouldn't your query URL be the PHP script?

I.e. instead of


QNetworkRequest request("http://127.0.0.1/bridge/bridge.html");

using


QNetworkRequest request("http://127.0.0.1/bridge/general_query.php");


Cheers,
_

Thank you very much, I find out my errors.

first error, wrong php script


<?php

$response["response"] = array();

$result = array();
$result["server"] = $_POST['db_server'];
$result["user"] = $_POST['db_user'];
$result["password"] = $_POST['db_password'];
$result["database"] = $_POST['db_database'];
$result["message"] = $_POST['query_message'];

array_push($response["response"], $result);

echo json_encode($response);
?>


second, the request url is incorrect



QNetworkRequest request("http://127.0.0.1/bridge/general_query.php");


third, I don't need QUrl, QUrlQuery is enough for the task