日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++利用gSoap调用WebService服务

發布時間:2025/3/21 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++利用gSoap调用WebService服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近要利用C++調用WebService接口,中間工具是gSoap,IDE:VS2010,WebService接口:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

關于Soap,它是一種簡單對象訪問協議,是一種輕量的、簡單的、基于 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的信息。它是一種通信協議,用于Web應用程序之間的因特網通信,它提供一組不受平臺和語言限制的方法使應用程序得以相互之間進行Intertnet通信。而gSoap可以看做是對soap的一個實現封裝,它隱藏了在調用WebService中的大量實現細節,使得C++調用WebService變得較為簡單。它提供編譯工具(實際就是針對接口的WSDL生成類文件),然后引入工程操作生成類即可達到訪問WebService接口的目的。仔細查看生成的文件就會發現生成的類與WebService接口的WSDL文件實際相對應的。

WSDL,最初弄的WSDL的時候被這個WSDL弄的焦頭爛額的。這個文件實際上就是WebService的對外接口文件,它是一個XML文件,描述了WebService接口的外部方法和抽象方法,以及各協議下的相關調用,是一個用來描述Web服務和說明如何與Web服務通信的XML語言,為用戶提供詳細的接口說明書。對于WSDL文件,只需要在瀏覽器中打開,即可查看到WebService接口的外部供調用的方法。

對于Soap,gSoap,WSDL就大致介紹到這里,這里記錄如何在C++中調用WebService接口,以http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl為例,一個查詢手機號碼歸屬地的WebService接口。

下載gSoap-2.8版本解壓放置D盤,在命令行下進入gSoap-2.8/gsoap/bin/win32目錄。網絡上有不少gSoap的下載,讀者可自行下載。

然后運行命令:wsdl2h -s -o service1.h http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,這時在wsdl2h.exe目錄下生成service1.h頭文件,然后運行命令:soapcpp2 -C -x service1.h生成其他的文件,在我的目錄下生成了這些文件:


第一個紅色圈圈里面都是生成的文件,要全部引入工程,其中soapClientLib.cpp文件無用,不引入,引入會報錯。然后將gSoap-2.8/目錄喜愛的stdsoap2.h/cpp也要引入工程。

取消soapC.cpp,soapClient.cpp,stdsoap2.cpp這三個文件的預編譯頭,在stdafx.h文件中增加#include"MobileCodeWSSoap.nsmap"

從webService獲取數據:

[cpp] view plaincopyprint?
  • void?callService()??
  • {??
  • ????LOG_TRACE_METHOD();??
  • ????struct?soap?soap;??
  • ????char*?str="";??
  • ????wchar_t*?str_1?=?NULL;??
  • ????int?b=0;??
  • ????class?_ns1__getMobileCodeInfoResponse?resultStr;??
  • ????class?_ns1__getMobileCodeInfo?a;??
  • ????soap_init(&soap);??
  • ????soap_set_mode(&soap,SOAP_C_MBSTRING);??
  • ????a.mobileCode?=?ConvAnsiToUtf8("18600960941");??
  • ????soap_call___ns2__getMobileCodeInfo(&soap,"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl","",&a,&resultStr);??
  • ????if?(soap.error)???
  • ????{???
  • ????????soap_print_fault(&soap,?stderr);???
  • ????}???
  • ????else???
  • ????{??
  • ????????str?=?resultStr.getMobileCodeInfoResult;??
  • ????????std::cout?<<?str?<<?endl;??
  • ????}??
  • ????soap_destroy(&soap);???
  • ????soap_end(&soap);???
  • ????soap_done(&soap);???
  • }??
  • 運行后如圖:


    我們可以查看http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,查看該xml文件可看到字符編碼是UTF8的,因此傳遞給接口的參數需要轉換到UTF8才可,ConvAnsiToUtf8()是轉換函數。gsoap?的?核心內部是入和出都是UTF8編碼的,由于中文是多字節的,所以將多字節的按照UTF8轉換,最終結果就是亂碼。正確的方式應該是:soap_set_mode(&soap,SOAP_C_MBSTRING);這樣中文便不會亂碼,可正常返回。

    總結

    以上是生活随笔為你收集整理的C++利用gSoap调用WebService服务的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。