2013-08-21 163 views
1

我正在使用gSOAP 2.8.15,並試圖按照gsoap文檔(http://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sEc19.14)的第19.14節中的說明執行HTTP身份驗證。gSOAP HTTP身份驗證

唯一的區別是在文檔中引入的代碼是用C語言編寫的,但我用C++編寫。

這裏是我的web服務

// The variable wsp is a instance of web service proxy generated by soapcpp2. 
// The proxy is a sub-class of the class soap 
wsp.userid = "user"; 
wsp.passwd = "password"; 
// call the function of web service 
wsp.get_version(&result); 

在服務器端,我使用這些代碼來檢查認證的客戶端代碼:

// The variable wss is the a instance of web service service generated by soapcpp2. 
if (wss.userid == NULL || wss.passwd == NULL) 
    //...... 

問題是,當我打電話使用客戶端代碼的Web服務的功能,userid和passwd在服務器端始終爲NULL。但是當我使用soapUI通過傳遞具有搶先授權模式的userid和passwd來調用相同的函數時,服務器將獲得沒有問題的信息。

我很感激有人能幫我解決問題。感謝您的關注。

回答

1

我已經使用tcpdump來捕獲Web服務服務器和客戶端之間發送的包,我發現當客戶端調用Web服務的功能時沒有發送HTTP頭。所以我在gSOAP的文檔中做了一些搜索,發現這樣一句話:

客戶端可能會使用http://前綴。如果不存在,則不會發送HTTP標頭 ,也不會將基於HTTP的信息傳送到 服務。

它解決了我的問題...