POST Qtを使用するためのデータが必要です。WebサービスにPOSTするときにQByteArrayを使用できると考えました。
私の質問は、もう一方の端で正しく解析されるようにこの配列をフォーマットするにはどうすればよいですか?
これは私がこれまでに持っているコードです:
// 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);
ありがとう!
私が使用した:
QByteArray postData;
postData.append("param1=string&");
postData.append("param2=string");
そのため、各パラメーターの後の改行の代わりに&。
一部のパラメーターと値はutf-8およびパーセントエンコード(スペース、&、=、特殊文字...)が必要になる場合があるため、QUrl
(Qt 4の場合)またはQUrlQuery
( Qtの場合5)投稿された文字列を作成します。
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());
および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());
Qt 4.8以降では、ファイルをアップロードする必要がある場合は QHttpMultiPart を使用することもできます。
Qis5へのalexisdmの回答の更新:
// Setup the webservice url
QUrl serviceUrl = QUrl("http://your.url");
QByteArray postData;
QUrlQuery query;
query.addQueryItem("param1","string1");
query.addQueryItem("param2","string2");
postData = query.toString(QUrl::FullyEncoded).toUtf8();
// Call the webservice
QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
connect(networkManager, SIGNAL(finished(QNetworkReply*)),
SLOT(onPostAnswer(QNetworkReply*)));
QNetworkRequest networkRequest(serviceUrl);
networkRequest.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
networkManager->post(networkRequest,postData);
含めることを忘れないでください
QT += network
.proで.
実際の答えは
QByteArray postData;
postData.append("param1=string&");
postData.append("param2=string");
注:ここでは「&」を使用してください!!!。
ここではJuhaの答えに気付かず、「、\ n」アプローチを使用してコードをテストするのに多くの時間を無駄にしています。
ジュハの正解を変更してください。
これを処理する別の方法があります。私はあなたのコードを使用して完全なコードを提供しています:
// Setup the webservice url
QUrl serviceUrl = QUrl("http://myserver/myservice.asmx");
QByteArray postData;
QUrl params;
params.addQueryItem("param1","string1");
params.addQueryItem("param2","string2");
postData = params.encodedQuery();
// Call the webservice
QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*)));
networkManager->post(QNetworkRequest(serviceUrl), postData);