Qt5 posting data to server using QUrl / QNetworkRequest

I have a piece of code that worked in 4.8 but now I need to port it to Qt5 (beta2)
This is what should happen:
I want to post some data to a webserver the url should look like this "http://server/actions.php" Then my fields (a "Action" -string and a "data" string(json)) should be sent to the server using post. Not encoded in the url

QUrl params;
// The data to post
QVariantMap map;

map["Title"]="The title";
map["ProjectId"]="0";
map["Parent"]="0";
map["Location"]="North pole";
map["Creator"]="You";
map["Group"]="a group";
QByteArray data = Json::serialize(map); //the map is converted to json im a QByteArray

params.addEncodedQueryItem("Data",data);
params.addQueryItem("Action", "Update");

QNetworkRequest Request(QUrl("http://server.com/actions.php"));
Request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
NetManager->post(Request,params.encodedQuery());

Now, i might not be doing this right in the first place,(It worked in 4.8) but the real problem is that addEncodedQueryItem and addQueryItem are now gone since Qt5 and I don't know what I should replace them with.
I have read the new docs and see the new QUrlQuery but I could not figure out on my own how to use this in my case.


I faced similar problem and used code similiar to the following in Qt5

QUrl url;
QByteArray postData;

url.setUrl("http://myurl....");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");

Qstring postKey = 'city';
QString postValue = 'Brisbane';

postData.append(postKey).append("=").append(postValue).append("&");         
networkManager.post(request,postData);

Hope it might be useful to rewrite your code to send http post values using Qt5


Qt5 no longer has the QUrl::encodedQuery() method. Not sure, but from the documentation it might work using QUrl::query() method instead.

Hope it helps.


QUrlQuery() helps you encode POST data.
Example in PyQt 5.4:

params = QtCore.QUrlQuery()
params.addQueryItem("username", "Вагиф Plaît")
reply = QtNetwork.QNetworkAccessManager().post(request, params.toString(QtCore.QUrl().FullyEncoded))
链接地址: http://www.djcxy.com/p/66472.html

上一篇: PHP MySQL用于MySQL表中的排列

下一篇: Qt5使用QUrl / QNetworkRequest将数据发布到服务器