I need to make an HTTP POST request to a server from my Qt application.
The POST request would contain a list of named values, i.e. key/value pairs. They will be mostly
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());
This code assumes that your current object is a QObject (passed as a parent for QNeworkAccessManager and slots declaration)
You can use QNetworkAccessManager together with QNetworkRequest to post http requests.
If you want to send key/value pairs, consider using JSON.
The current answer works for Qt 4. Syntax has changed for Qt 5 and would look like this:
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());
Some background information: http://doc.qt.io/qt-5/qurl-obsolete.html
Making Qt-version-aware code is described here: How do you port QUrl addQueryItem to Qt5's QUrlQuery?