Qt之QtSoap(访问WebService)

简述

Qt本身给我们提供了调用WebService的解决方案QtSoap,源码及示例见:qt-solutions-qtsoap

  • 简述
  • 下载编译
  • 使用
  • 实例解析
    • 示例
    • 效果
    • 源码
  • 更多参考

下载编译

下载源码后,需要修改一些地方(我的版本是Qt5),按照错误提示修改即可,很简单。

编译完成之后会生成QtSolutions_SOAP-headd.lib、QtSolutions_SOAP-headd.dll。。。

使用

拷贝QtSolutions_SOAP-headd.lib至lib目录下,拷贝qtsoap.h至include目录下。

pro中添加库文件及库目录:

INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/lib -lQtSolutions_SOAP-headd

实例解析

下面,我们以“获得腾讯QQ在线状态”为例,见:WebXml.com.cn,里面包含了大量的Web服务,例如:手机号码归属地查询,电子邮件地址验证、城市天气预报查询等。

示例

SOAP 1.1

以下是SOAP1.1请求和响应示例。所显示的占位符需替换为实际值。

效果

源码

// 构建控件
m_pQQLabel = new QLabel(this);
m_pStateLabel = new QLabel(this);
m_pQQLineEdit = new QLineEdit(this);
m_pStateLineEdit = new QLineEdit(this);
m_pSubmitButton = new QPushButton(this);

m_pStateLineEdit->setReadOnly(true);
m_pQQLabel->setText(QString::fromLocal8Bit("QQ号码:"));
m_pStateLabel->setText(QString::fromLocal8Bit("QQ状态:"));
m_pSubmitButton->setText(QString::fromLocal8Bit("提交"));

QGridLayout *pLayout = new QGridLayout();
pLayout->addWidget(m_pQQLabel, 0, 0);
pLayout->addWidget(m_pQQLineEdit, 0, 1);
pLayout->addWidget(m_pStateLabel, 1, 0);
pLayout->addWidget(m_pStateLineEdit, 1, 1);
pLayout->addWidget(m_pSubmitButton, 2, 1, 1, 1, Qt::AlignRight);
pLayout->setSpacing(10);
pLayout->setContentsMargins(10, 10, 10, 10);
setLayout(pLayout);

// 连接信号槽
m_pHttp = new QtSoapHttpTransport(this);
connect(m_pSubmitButton, SIGNAL(clicked()), this, SLOT(onSubmit()));
connect(m_pHttp, SIGNAL(responseReady(const QtSoapMessage &)), this, SLOT(onResponse(const QtSoapMessage &)));

// 提交请求
void MainWindow::onSubmit()
{
    QtSoapMessage message;

    // 设置方法
    message.setMethod("qqCheckOnline", "http://WebXml.com.cn/");

    // 设置动作
    m_pHttp->setAction("http://WebXml.com.cn/qqCheckOnline");

    // 设置主机
    m_pHttp->setHost("www.webxml.com.cn");

    // 添加方法参数
    QString strQQ = m_pQQLineEdit->text();
    message.addMethodArgument("qqCode", "", strQQ);
    QString strXML = message.toXmlString();

    // 提交请求
    m_pHttp->submitRequest(message, "/webservices/qqOnlineWebService.asmx");
}

void MainWindow::onResponse(const QtSoapMessage &response)
{
    QString strXML = response.toXmlString();
    QDomDocument doc;
    doc.setContent(strXML);

    // 接在在线状态
    QDomNodeList nodeList = doc.elementsByTagName("qqCheckOnlineResult");
    if (!nodeList.isEmpty())
    {
        QDomNode node = nodeList.at(0);
        QString strResult = node.toElement().text();
        QString strState("N/A");
        if (QString::compare(strResult, "Y") ==0)
        {
            strState = QString::fromLocal8Bit("在线");
        }
        else if (QString::compare(strResult, "N") == 0)
        {
            strState = QString::fromLocal8Bit("离线");
        }
        else if (QString::compare(strResult, "E") == 0)
        {
            strState = QString::fromLocal8Bit("QQ号码错误");
        }
        else if (QString::compare(strResult, "A") == 0)
        {
            strState = QString::fromLocal8Bit("商业用户验证失败");
        }
        else if (QString::compare(strResult, "V") == 0)
        {
            strState = QString::fromLocal8Bit("免费用户超过数量");
        }
        m_pStateLineEdit->setText(strState);
    }
}

我们也可以使用qq号码进行在线验证:qqCheckOnline

更多参考

时间: 2024-11-10 12:37:40

Qt之QtSoap(访问WebService)的相关文章

无需.net和专用组件实现用asp访问webservice

web|访问 可能,大多数的人认为我们需要运行asp.net或使用soap toolkit以访问webservice但是这不是必需的,使用微软的xml parser我们同样可以利用传统的asp页面来访问webservice,下面我就展示给大家看一看!我将使用三个文件来实现我的展示.    global.asa,当程序开始运行时,使用application变量    i_soapcall.asp 一个包含文件,用以访问soap service    default.asp 一个基本的asp文件,用

ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问 WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也没 什么大的差别. 在ASP.NET应用程序里使用ASP.NET AJAX访问WebService通常都是通过 ScriptMananger引入WebService生成客户端代理的方法,同时也可以使用 Microsoft Ajax Library来完成.本文将介绍在ASP.NET MVC中使用AS

Java访问WebService返回XML数据的方法

  本文实例讲述了Java访问WebService返回XML数据的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

nusoap-用php的NuSoap 访问webservice遇到的问题。

问题描述 用php的NuSoap 访问webservice遇到的问题. 下了0.9.5版本的nusoap,访问java开发的webservice接口,结果一直都连不上,帮忙看一下是什么问题.谢谢.程序报错:Errorwsdl error: XML error parsing WSDL from http://192.168.102.126:8080/eos-default//eos-default/LoginManager on line 32: EntityRef: expecting ';'

java 访问webservice 异常

问题描述 java 访问webservice 异常 log4j:WARN No appenders could be found for logger (org.apache.axis2.context.AbstractContext).log4j:WARN Please initialize the log4j system properly.Exception in thread ""main"" org.apache.axis2.AxisFault: Firs

.net-通过设置代理服务器访问WebService 提示【HTTP status 407: authenticationrequired】

问题描述 通过设置代理服务器访问WebService 提示[HTTP status 407: authenticationrequired] 大家好,针对如题问题,我查找了网上相关解释,但大多是针对 [**Proxy** authenticationrequired]这个问题的回复,而我遇见的问题[authenticationrequired]貌似与其不大一样,以下我做出我的描述: 1.服务器被加入域中,该域网络不可通过外网访问其网络,访问外网时需要通过代理服务器访问 2.程序开发是用.net编

浏览器调接口-浏览器怎么访问webservice接口

问题描述 浏览器怎么访问webservice接口 求大神告知 浏览器怎么访问webservice接口,在线等.............. 解决方案 不是很明白, 你浏览器通过http,在地址栏输入你的 webservice 的地址就可以. 解决方案二: 首先去google,如何调用webservice.有多重实现方式!自己选择 但是前提是你必须知道wsdl文件的定义,你所需要的参数全部在里面有.自己去看! 解决方案三: 可以通过浏览器掉接口里面的方法吗 解决方案四: 直接在浏览器调用webser

web service-求助:spring webservicetemplate访问webservice怎么设置超时时间?

问题描述 求助:spring webservicetemplate访问webservice怎么设置超时时间? 客户端使用webservicetemplate访问,调用marshalSendAndReceive(String uri, Object requestPayload, WebServiceMessageCallbak requestCallback)方法,怎么样设置超时时间? 解决方案 CXF-WebService设置超时时间 解决方案二: 使用CommonsHttpMessageSe

服务器-ksoap访问webservice出现SocketException

问题描述 ksoap访问webservice出现SocketException ksoap访问服务器一个接口会随机出现java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)只有这个接口访问会随机出现异常其他的接口都能正常访问.服务器php写的webservice.....求大神解答 困扰好几天的问题

web service-为什么在模拟器上可访问webservice,而在手机上安装后却,直接停止运行

问题描述 为什么在模拟器上可访问webservice,而在手机上安装后却,直接停止运行 为什么在模拟器上可访问webservice,而在手机上安装后却,直接停止运行 解决方案 挂在手机上,调一下,看看错误信息 解决方案二: 是不是网络问题?还是不稳定,建议添加一个判断网络的.可以把手机接到电脑上,用手机直接调试程序.