【问题标题】:How to get response in XML from web service in QT c++如何从 QT c++ 中的 Web 服务获取 XML 响应
【发布时间】:2016-11-28 05:28:41
【问题描述】:

我正在尝试为 Web 服务创建客户端应用程序。在该应用程序中,我需要通过该 Web 服务链接传递一些整数,然后 Web 服务给我一些 XML 格式的数据。我能够完成对该 Web 服务的 ping 操作,但我不知道如何通过该 Web 服务传递整数值。请给我一些 C++ 中请求-响应 Web 服务的示例代码。响应数据采用 XML 格式,我想存储在某个文本文件或向量中。我需要使用打印机打印的数据。

这是我为 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();
}

【问题讨论】:

  • 您当前的代码遇到的确切问题是什么?如果您只是在寻找使用QNetworkAccessManager 的示例,请查看this answer
  • 感谢 Mike 先生的回复。在您的回答中,您解析 JSON,但我需要 XML。我真正想要的是,我必须使用 Web 服务连接服务器。在该服务器客户数据存储上,我只需要通过该 Web 服务传递客户 ID,然后服务器以 XML 格式向我提供该特定客户的数据,我想存储该 xml 文件以供以后使用打印机在纸上打印该数据。
  • 看看doc.qt.io/qt-5/xml-processing.html,用Qt处理/处理XML。

标签: c++ xml qt web-services response


【解决方案1】:

我可能错了,但您可能需要传递 POST 或 GET 参数才能传递您的号码。

获取:

GET 将要求您在 URL 末尾添加参数,如下所示: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 将要求您使用 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());

【讨论】:

  • 这是不对的。您可以将 QUrlQuery 与 GET 请求一起使用,请参阅 this answer。事实上,使用QUrlQuery 远比使用QString::arg() 自己构建URL 要好得多,因为前者会在需要时自动转义字符。
  • 谢谢先生的回复。基本上我想做的是,我有一个 Web 服务 URL,我想制作一个客户端应用程序来访问 Web 服务方法。我如何在我的应用程序中使用该 Web 服务的方法?即用 QT C++ 开发
【解决方案2】:

您需要 SOAP 吗?

为此使用 KDSoap:https://github.com/KDAB/KDSoap

*.wsdl:https://github.com/KDAB/KDSoap/tree/master/examples 有代码生成和不生成代码的示例

【讨论】:

    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多