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

Posted

技术标签:

【中文标题】Qt5 使用 QUrl / QNetworkRequest 将数据发布到服务器【英文标题】:Qt5 posting data to server using QUrl / QNetworkRequest 【发布时间】:2012-11-26 12:25:11 【问题描述】:

我有一段在 4.8 中工作的代码,但现在我需要将它移植到 Qt5 (beta2) 这是应该发生的: 我想将一些数据发布到网络服务器,网址应如下所示“http://server/actions.php” 然后应该使用 post 将我的字段(“Action”-string 和“data”string(json))发送到服务器。未在 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,但我自己无法弄清楚如何在我的情况下使用它。

【问题讨论】:

【参考方案1】:

我遇到了类似的问题,在 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 值可能有用

【讨论】:

【参考方案2】:

Qt5 不再有QUrl::encodedQuery() 方法。不确定,但从文档来看,它可能使用 QUrl::query() 方法代替。

希望对你有帮助。

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于Qt5 使用 QUrl / QNetworkRequest 将数据发布到服务器的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 http/HTTPS访问 以及JSON解析的实用

如何用QT5做一个获取网页源码的东西

QT5中QtMultimedia怎么用?带个例子啊,

QMediaPlayer 中播放声音的内部扩展

无法将 QList<QUrl> 分配给 QString

PyQt 启动时加载函数(qml 加载器)