Qt5使用QUrl / QNetworkRequest将数据发布到服务器

时间:2012-11-26 12:25:12

标签: qt qnetworkaccessmanager qt5 qurl

我有一段代码在4.8中工作但现在我需要将它移植到Qt5(beta2)
这是应该发生的事情:
我想将一些数据发布到网络服务器,网址应该是这样的“http://server/actions.php” 然后我的字段(“Action”-string和“data”字符串(json))应该使用post发送到服务器。未在网址中编码

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());

现在,我可能不会在第一时间做到这一点,(它工作在4.8)但真正的问题是addEncodedQueryItem和addQueryItem现在从Qt5开始消失了,我不知道应该用它替换它们。
我已经阅读了新的文档并看到了新的QUrlQuery,但在我的案例中我无法弄清楚如何使用它。

3 个答案:

答案 0 :(得分:6)

我遇到了类似的问题,并在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);

希望重写代码以使用Qt5

发送http post值可能会有用

答案 1 :(得分:1)

Qt5不再使用QUrl::encodedQuery()方法。不确定,但是从文档中可以使用QUrl::query()方法工作。

希望它有所帮助。

答案 2 :(得分:0)

QUrlQuery()可帮助您对POST数据进行编码 PyQt 5.4中的示例:

params = QtCore.QUrlQuery()
params.addQueryItem("username", "Вагиф Plaît")
reply = QtNetwork.QNetworkAccessManager().post(request, params.toString(QtCore.QUrl().FullyEncoded))