1

我需要从我的 Qt 应用程序向服务器发出 HTTP POST 请求。

POST 请求将包含命名值的列表,即键/值对。它们主要是字母数字字符串,但可以包含特殊字符,例如引号、空格等。

在 Qt 中执行此类 POST 请求的规范方法是什么?

4

3 回答 3

8

当前答案适用于 Qt 4。Qt 5 的语法已更改,如下所示:

QUrlQuery params;

params.addQueryItem("key1", "value1");
params.addQueryItem("key2", "value2");

QUrl resource("http://server.com/form.php");
QNetworkAccessManager* manager = new QNetworkAccessManager(this);

connect(manager, SIGNAL(finished(QNetworkReply*)), this, 
SLOT(handleEndOfRequest(QNetworkReply*)));

QNetworkRequest request(resource);
//Force Content-Type header
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

manager->post(request, params.query(QUrl::FullyEncoded).toUtf8());

一些背景资料: http ://doc.qt.io/qt-5/qurl-obsolete.html

此处描述了制作 Qt 版本感知代码: How do you port QUrl addQueryItem to Qt5's QUrlQuery?

于 2018-05-02T11:08:42.607 回答
2
QUrl params;

params.addQueryItem("key1", "value1");
params.addQueryItem("key2", "value2");

QUrl resource("http://server.com/form.php");
QNetworkAccessManager* manager = new QNetworkAccessManager(this);

connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleEndOfRequest(QNetworkReply*)));

QNetworkRequest request(resource);
//Force Content-Type header
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

manager->post(request, params.encodedQuery());

此代码假定您当前的对象是 QObject(作为 QNeworkAccessManager 和插槽声明的父级传递)

于 2013-08-26T08:12:35.407 回答
0

您可以将 QNetworkAccessManager 与 QNetworkRequest 一起使用来发布 http 请求。
如果要发送键/值对,请考虑使用 JSON。

于 2013-08-26T07:55:45.373 回答