我有一段在 4.8 中工作的代码,但现在我需要将其移植到 Qt5 (beta2)
这是应该发生的事情:
我想将一些数据发布到网络服务器,网址应如下所示"http://server/actions.php"然后我的字段("操作"字符串和"数据"字符串(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 中有效),但真正的问题是,自 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 帖子值可能会有用
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))