Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make HTTP POST request with a list of named parameters in Qt

Tags:

c++

http

post

qt

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 alphanumeric strings, but can contain special characters such as quotes, spaces, etc.

What is the canonical way of doing this type of POST request in Qt?

like image 257
sashoalm Avatar asked Dec 06 '25 03:12

sashoalm


2 Answers

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?

like image 82
ftw Avatar answered Dec 08 '25 16:12

ftw


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)

like image 22
epsilon Avatar answered Dec 08 '25 17:12

epsilon



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!