使用QUrl/QNetworkRequest在Qt5中向服务器发布数据

8

我有一段代码,在4.8版本中可以正常运行,但现在需要将其移植到Qt5(beta2)
以下是期望实现的功能:
我想要将一些数据发布到一个Web服务器,URL应该像这样 "http://server/actions.php" 然后我的字段(一个“Action”-字符串和一个“data”字符串(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中起作用),但真正的问题是addEncodedQueryItem()addQueryItem()自Qt5之后已经被删除,我不知道应该用什么替代它们。
我已经阅读了新文档,并看到了新的QUrlQuery,但我无法自己弄清如何在我的情况下使用它。

3个回答

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

Qt5不再支持QUrl :: encodedQuery()方法。不确定,但从文档中可以看出,可以使用QUrl :: query()方法代替。

希望能有所帮助。


0

QUrlQuery() 可以帮助您编码 POST 数据。
PyQt 5.4 中的示例:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接