C++webservice接口调用
一、WebService例子
1.准备要调用的webservice接口的wsdl地址,比如网上的查询天气接口:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
2.准备gSOAP工具:将gsoap_2.8.100.zip解压,进入gsoap_2.8.100\gsoap-2.8\gsoap\bin\win32目录下(工具可以在这个网址下载:https://sourceforge.net/projects/gsoap2/files/gsoap-2.8/)

3.将wsdl文件保存到win32目录下,如下;

4.在该目录下打开cmd窗口(按住shift键,然后点击鼠标右键,选择“在此处打开命令窗口”),如下:

5.在黑窗口中输入命令:wsdl2h -s WeatherWS.wsdl,点击回车生成WeatherWS.h头文件


6.继续在黑窗口输入命令:soapcpp2 -i -C -x -L WeatherWS.h -IE:\CPLUSPLUSEX\gsoap_2.8.100\gsoap-2.8\gsoap\import,点击回车生成一些头文件和源文件;(注意:我的gSOAP放在的是E:\CPLUSPLUSEX\下面,你们自己根据自己的路径输入)


7.打开Visual Studio 2012,在里面新建一个空项目

8.将文件复制到“头文件”和“源文件”里面,如下所示(注意:应该先把所有文件都要复制到项目的文件夹里面,再从项目文件复制到“头文件”和“源文件”里面,其中的stdsoap2.h和stdsoap2.cpp在gsoap_2.8.100\gsoap-2.8\gsoap目录下。反正我是这样搞的,不然报些错误)


9.编写调用接口的代码,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <fstream> //包含soap头文件
#include "soapH.h"
#include "soapStub.h"
#include "WeatherWSSoap.nsmap"
#include "soapWeatherWSSoapProxy.h" using namespace std; int main(int argc, char **argv)
{
//WebService的请求地址
char* web_url = "http://ws.webxml.com.cn/WebServices/WeatherWS.asmx";
//soap接口
WeatherWSSoapProxy soap(SOAP_C_UTFSTRING);
//构造输入参数
_ns1__getWeather city_name;
city_name.theCityCode = "";
city_name.theUserID = ""; //输出参数
_ns1__getWeatherResponse weather_res;
//调用接口方法getWeather
int xlt = soap.getWeather(web_url, NULL, &city_name, weather_res);
//判断接口返回值, SOAPOK表示成功
if (xlt == SOAP_OK)
{
// 获取返回结果
ns1__ArrayOfString* aos = weather_res.getWeatherResult; // 打印返回结果
int count = aos -> __sizestring;
char **result = aos -> string;
for (int i = 0; i < count; i++)
{
cout << result[i] << endl;
}
} getchar();
return 0; }

10.跑起来,发现有结果,但有乱码。其实我入参传的空值,默认返回的应该是上海的天气。乱码是因为编码不是使用UTF-8。

二、WebService第二个demo
手头有个项目需要调用webservice接口,选取的开发语言为c++,下面是我的预研结果:
1、C++调用webservice接口环境准备
使用gsoap工具类库,你可以通过链接去下载最新版本,按照步骤去安装(省去......无非是./configure&&make&&makeinstall)
备注:本人使用的gsoap版本为 gsoap-2.8
2、webservice接口解析获得C++文件
下面这个命令是将webservice接口文档解析到outfile.h文件中,infile.wsdl是你下载的接口文件或者直接将WSDL的URL替换也可以,后面的实例会用到;
wsdl2h -o outfile.h infile.wsdl
or
wsdl2h -o outfile.h http://www.xmethods.net/wsdl/query.wsdl
接下来生成C++接口文件:
soapcpp2 -j outfile.h
若你要生成纯C的接口文件,使用参数 -c:
soapcpp2 -c outfile.h
这一步有时会出现找不到头文件,只需要执行时添加-I参数即可,如:
soapcpp2 -j outfile.h -I/home/***/.../import
走到这一步就完成了准备工作,接下来就可以开始编程了
3、实例
webservice接口地址:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
此为国内手机号码归属地查询的一个接口,在网上找的,不可尽信,因为接口需要userid,我只是走个过场,SOAP正常即达到目的
第一步生成头文件:
wsdl2h -o mobile.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
此时你的目录中会生成mobile.h的头文件
第二步生成对应的接口类文件:
soapcpp2 -j mobile.h -I/home/demon/gsoap-2.8/gsoap/import
你可以不加-I,除非编译器找不到头文件
第三步开始编程,我只写了个测试的主函数:
- #include "soapMobileCodeWSSoapProxy.h"
- #include "MobileCodeWSSoap.nsmap"
- #include <iostream>
- using namespace std;
- int main()
- {
- MobileCodeWSSoapProxy proxy;
- _ns1__getMobileCodeInfo *info = new _ns1__getMobileCodeInfo();
- info->mobileCode = new string("13488889999");
- info->userID = new string("888");
- _ns1__getMobileCodeInfoResponse *response = new _ns1__getMobileCodeInfoResponse();
- int ret = proxy.getMobileCodeInfo(info, response);
- cout<<"SOAP_OK:"<<SOAP_OK<<";RET:"<<ret<<";RETMSG:"<<*(response->getMobileCodeInfoResult)<<endl;
- return 0;
- }
第四步编写简易makefile:
OBJS=test.o soapC.o soapMobileCodeWSSoapProxy.o
EXE=test
CPPFLAGS=-g -Wall -std=c++11 -I/home/demon/gsoap-2.8/gsoap -L/home/demon/gsoap-2.8/gsoap -lgsoap++
$(EXE):$(OBJS)
g++ $^ -o $@ $(CPPFLAGS)
clean:
rm *.o
编译通过之后执行结果为:
SOAP_OK:0;RET:0;RETMSG:http://www.webxml.com.cn
C++webservice接口调用的更多相关文章
- webService 接口调用配置
1.配置XML文件,如果新建一个XML文件需要在applicationContext.xm里面配置一下 <import resource="cxf-client.xml" / ...
- python通过http请求发送soap报文进行webservice接口调用
最近学习Python调用webservice 接口,开始的时候主要采用suds 的方式生产client调用,后来发现公司的短信接口采用的是soap报文来调用的,然后开始了谷歌,最后采用httplib ...
- 使用cxf做webservice接口调用
一.服务端 建javaweb工程,去官网下载所需的cxf接口发布的jar包,导入到工程.官网地址:http://cxf.apache.org/download.html 1.建立调用接口 packag ...
- 业务逻辑:完成客户下单后前台系统的数据处理并调用后台系统服务处理业务 webservice接口调用 有用
思路: 页面提交表单后,在Action类中将页面提交的参数进行组装,随后通过使用Webservice技术来远程调用后台系统的业务接口服务来进行订单的保存操作 操作步骤: 在前台系统的Action类中通 ...
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...
- webservice接口调用存储过程返回失败
poka.cashman.timer.service.impl.PdaOperateServiceImpl - Method Name: cashBoxOutOrIn; cbInfo:JN002015 ...
- webservice接口调用
package com.montnets.emp.sysuser.biz; import org.apache.axis.client.Call; import org.apache.axis.cli ...
- Webservice接口的调用
一.开发webservice接口的方式 1.jdk开发. 2.使用第三方工具开发,如cxf.shiro等等. 我这边介绍jdk方式webservice接口调用. 二.使用jdk调用webservice ...
- 基于Axis1.4的webservice接口开发(接口调用)
基于Axis1.4的webservice接口开发(接口调用) 一.webservice接口代码参考上一篇博客: http://www.cnblogs.com/zhukunqiang/p/7125668 ...
随机推荐
- MathType如何输入微分上的点
作为被老师们青睐的公式编辑器,MathType可以帮助插入各种数学符号和编辑数学公式,从而提高数学试卷的编写效率.但是作为新手,在编辑公式的时候难免有困难,比如就有人问:如何输入微分上的点?其实也是有 ...
- 如何用EasyRecovery恢复受损的SD卡?
SD卡的主要功能是拓展便携式设备.包括:数据相机.手机及其他的多媒体播放器等的存储空间,缓解设备本身的存储压力.即便是在产品内存已经逐渐增加的情况下,还是拥有一大批的忠实用户. 很多用户反应,SD卡使 ...
- HDU4632 Palindrome subsequence
标签(空格分隔): 区间qp Palindrome subsequence \[求一个string的 回文子序列 的个数 \] 少废话,上代码. #include<bits/stdc++.h&g ...
- C语言讲义——指针函数和函数指针
指针函数 返回值是指针的函数,如void* malloc(...) #include<stdio.h> #include<stdlib.h> #include<strin ...
- [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误
一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...
- 详解docker部署SpringBoot及如何替换jar包
关于docker的安装和使用,可以看看之前这两篇文章.Docker从安装部署到Hello World和Docker容器的使用和连接.这篇文章主要介绍如何在docker上部署springboot项目.关 ...
- vue跨域请求
浏览器的同源策略 同源 协议相同 域名相同 端口相同 同源目的 保证用户信息安全,防止恶意的网站窃取数据 同源策略解决方法 jsonp cors 代理解决跨域 settings.py INSTALLE ...
- 生成微博授权URL及回调地址
1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...
- vue+element ctrl+s保存写法
<el-input type="textarea" ref="inppp" v-model="values" placeholder= ...
- 20190814_tomcat配置项目的错误页
1. 打开项目中的web.xml, 注意不是tomcat的web.xml; 一般是在项目的 WEB-INF目录下, 然后加上下面的语句 <error-page> <error-cod ...