2016-11-28 17 views
0

Webサービス用のクライアントアプリケーションを作成しようとしています。そのアプリケーションでは、そのWebサービスリンクで整数値を渡す必要があります。次に、WebサービスでXML形式のデータを取得します。私はそのWebサービスでpingを完了できますが、そのWebサービスで整数値を渡す方法はありません。リクエストレスポンスWebサービスのサンプルコードをC++で提供してください。応答データはXMLであり、テキストファイルまたはベクトルで保存したい。そのデータをプリンタで印刷する必要があります。ここでQTでWebサービスからXMLで応答を受け取る方法C++

は、私は、Webサービスのための開発私のコードです:

void Downloader::doDownload() 
{ 
    manager = new QNetworkAccessManager(this); 
    connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*))); 
    manager->get(QNetworkRequest(QUrl("http://api.flickr.com/services/soap/"))); 
    exit(0); 
} 
void Downloader::replyFinished (QNetworkReply *reply) 
{ 
    if(reply->error()) 
    { 
     qDebug() << "ERROR!!!!"; 
     qDebug() << reply->errorString(); 
    } 
    else 
    { 
     qDebug() << reply->header(QNetworkRequest::ContentTypeHeader).toString(); 
     qDebug() << reply->header(QNetworkRequest::LastModifiedHeader).toDateTime().toString(); 
     qDebug() << reply->header(QNetworkRequest::ContentLengthHeader).toULongLong(); 
     qDebug() << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 
     qDebug() << reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); 

     QFile *file = new QFile("/root/Downloads/QT Web Services/WebServiceResponseData.txt"); 
     if(file->open(QFile::Append)) 
     { 
     file->write(reply->readAll()); 
     file->flush(); 
     file->close(); 
     } 
     delete file; 
    } 

    reply->deleteLater(); 
} 
+0

あなたの現在のコードで行っている正確な問題は何ですか? 'QNetworkAccessManager'の使用例を探しているだけなら、[この回答](https://stackoverflow.com/a/39521698/2666212)を見てください。 – Mike

+0

ありがとうございました。答えではJSONを解析しますが、XMLが必要です。私は正確に何を望んでいる、私はWebサービスを使用してサーバーに接続する必要があります。そのサーバーの顧客データストアでは、私はそのWebサービスで顧客IDを渡す必要がありますし、サーバーはXMLでその特定の顧客のデータを与え、私は後でそのデータをプリンタで紙に印刷するために使用するXMLファイルを保存します。 –

+0

QtでXMLを処理/処理するためのhttp://doc.qt.io/qt-5/xml-processing.htmlを見てください。 – ManuelH

答えて

0

私は間違っているかもしれませんが、あなたはあなたの番号を渡すためにPOSTを渡したり、パラメータを取得するために必要な場合があります。

GET:あなたはこのようなURLの末尾に引数を追加するlrequire

GETウィル:http://yoururl.com/page?arg1=1&arg2=2&arg3=3

//Replace "arg" by the argument name provided by the API documentation, something like "?xml" 
QString urlString = QString("http://api.flickr.com/services/soap?arg=%1").args(QString::number(yourNumber)) 
manager->get(QNetworkRequest(QUrl(urlString))); 

POST:

POSTを使用する必要がします必要なパラメータを追加するためのQUrlQueryオブジェクト

QUrlQuery *postData = new QUrlQuery; 
//Replace "arg" by the argument name provided by the API documentation, something like "xml" 
postData->addQueryItem("arg", yourNumber); 
manager->post(QNetworkRequest(QUrl("http://api.flickr.com/services/soap/")), postData->toString(QUrl::FullyEncoded).toUtf8()); 
+0

これは正しくありません。あなたはGETリクエストで 'QUrlQuery'を使うことができます。[この回答](https://stackoverflow.com/a/15620789/2666212)を見てください。実際、 'QUrlQuery'を使うことは、' QString :: arg() 'を使ってURLを構築するよりもはるかに優れています。なぜなら、前者は必要なときに自動的にエスケープ文字を処理するからです。 – Mike

+0

お返事ありがとうございます。基本的には、私はWebサービスのURLを持っています。Webサービスのメソッドにアクセスするためのクライアントアプリケーションを作成したいのです。アプリケーションでそのWebサービスのメソッドをどのように使用するのですか? QT C++で開発されました –

関連する問題