C 利用gSoap呼叫WebService服務

2021-06-22 07:41:49 字數 1614 閱讀 7591

最近要利用c++呼叫webservice介面,中間工具是gsoap,ide:vs2010,webservice介面:

關於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介面,以為例,乙個查詢手機號碼歸屬地的webservice介面。

然後執行命令:wsdl2h -s -o service1.h ,這時在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 plain

copy

print?

void callservice()  

else   

soap_destroy(&soap);   

soap_end(&soap);   

soap_done(&soap);   

}  

執行後如圖:

我們可以檢視,檢視該xml檔案可看到字元編碼是utf8的,因此傳遞給介面的引數需要轉換到utf8才可,convansitoutf8()是轉換函式。gsoap 的 核心內部是入和出都是utf8編碼的,由於中文是多位元組的,所以將多位元組的按照utf8轉換,最終結果就是亂碼。正確的方式應該是:soap_set_mode(&soap,soap_c_mbstring);這樣中文便不會亂碼,可正常返回。

C C 利用gsoap庫呼叫WebService

c c 呼叫webservice需要用到soap庫,一般使用的有gsoap和axis cpp兩種實現,這裡使用gsoap來呼叫。gsoap可以在 linxu windows mac多種平台上使用。gsoap的主頁位址是 新建乙個webservice 寫乙個簡單的方法 webmethod descri...

qt使用gsoap呼叫webservice介面

2 解壓到c gsoap 2.7 3 將c gsoap 2.7下的soapcpp2.exe,wsdl2h.exe,stdsoap2.h,stdsoap2.cpp拷貝到c wstest client gsoap2.7目錄下 4 在c wstest client gsoap2.7目錄下執行soapcpp...

在PHP中利用wsdl建立標準webservice

說明 非標準的webservice,可能只能php才能訪問 標準的webservice,就必須要使用wsdl 在這裡我只介紹標準的webservice www.2cto.com 一 建立wsdl 2。修改soapdiscovery.class.php的公共方法getwsdl 讓其自動生成wsdl檔案...