C++調用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.跑起來,發現有結果,但有亂碼。其實我入參傳的空值,默認返回的應該是上海的天氣。亂碼問題目前沒有解決,如果返回值是英文就沒問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM