我需要从我的Qt应用程序向服务器发出HTTP POST请求。
POST请求将包含命名值列表,即键/值对。它们主要是字母数字字符串,但可以包含特殊字符,如引号,空格等。
在Qt中执行此类POST请求的规范方法是什么?
答案 0 :(得分:4)
目前的答案适用于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?
答案 1 :(得分: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和插槽声明的父对象传递)
答案 2 :(得分:0)
您可以将QNetworkAccessManager与QNetworkRequest一起使用来发布http请求 如果要发送键/值对,请考虑使用JSON。