Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I POST data to a url using QNetworkAccessManager

I have a webservice that I need to POST some data to using Qt. I figured that I can use a QByteArray when POSTing to the web service.

My question is, how can I format this array in order to be parsed correctly at the other end?

This is the code I have so far:

    // Setup the webservice url     QUrl serviceUrl = QUrl("http://myserver/myservice.asmx");     QByteArray postData;     /*     Setup the post data somehow    I want to transmit:    param1=string,    param2=string    */      // Call the webservice     QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);     connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*)));     networkManager->post(QNetworkRequest(serviceUrl), postData); 

Thanks!

like image 753
sabbour Avatar asked Apr 08 '10 11:04

sabbour


2 Answers

Since some parameters and values might need to be utf-8 and percent encoded (spaces, &, =, special chars...), you should rather use QUrl (for Qt 4) or QUrlQuery (for Qt 5) to build the posted string.

Example code for Qt 4:

QUrl postData; postData.addQueryItem("param1", "string"); postData.addQueryItem("param2", "string"); ... QNetworkRequest request(serviceUrl);     request.setHeader(QNetworkRequest::ContentTypeHeader,      "application/x-www-form-urlencoded"); networkManager->post(request, postData.encodedQuery()); 

and for Qt 5:

QUrlQuery postData; postData.addQueryItem("param1", "string"); postData.addQueryItem("param2", "string"); ... QNetworkRequest request(serviceUrl); request.setHeader(QNetworkRequest::ContentTypeHeader,      "application/x-www-form-urlencoded"); networkManager->post(request, postData.toString(QUrl::FullyEncoded).toUtf8()); 

Starting with Qt 4.8 you can also use QHttpMultiPart if you need to upload files.

like image 74
alexisdm Avatar answered Sep 22 '22 16:09

alexisdm


I used:

QByteArray postData; postData.append("param1=string&"); postData.append("param2=string"); 

So & instead of newline after each parameter.

like image 21
Juha Palomäki Avatar answered Sep 23 '22 16:09

Juha Palomäki