Qt5使用QUrl / QNetworkRequest将数据发布到服务器
我有一段代码在4.8中工作,但现在我需要将它移植到Qt5(beta2)
这是应该发生的事情:
我想发布一些数据到网络服务器的url应该看起来像这样“http://server/actions.php”然后我的领域(一个“行动”字符串和一个“数据”字符串(JSON))应发送到服务器使用post。 不在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());
现在,我可能并没有做到这一点(它在4.8中工作),但真正的问题是,自从Qt5以来,addEncodedQueryItem和addQueryItem已经消失,我不知道应该如何替换它们。
我已经阅读了新的文档,并看到新的QUrlQuery,但我无法自己弄清楚如何在我的情况下使用它。
我面临类似的问题,并在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值可能会很有用
Qt5不再有QUrl::encodedQuery()
方法。 不确定,但从文档中可以使用QUrl::query()
方法代替。
希望能帮助到你。
QUrlQuery()
可以帮助您编码POST数据。
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/66471.html
上一篇: Qt5 posting data to server using QUrl / QNetworkRequest