2011-10-21 76 views
6

我試圖生成一個Perl庫來連接到一個WebService。此Web服務位於HTTPS服務器中,我的用戶可以訪問它。Perl SOAP ::訪問HTTPS的WSDL無法理解的錯誤

我wsdl2perl.pl多次執行,使用不同的選項,它總是失敗的消息:Unauthorized at /usr/lib/perl5/site_perl/5.8.8/SOAP/WSDL/Expat/Base.pm line 73. 的事情是,當我不給我的用戶名/密碼作爲參數,它甚至不要求他們。

我讀過[SOAP :: WSDL :: Manual :: Cookbook](http://search.cpan.org/~mkutter/SOAP-WSDL-2.00.10/lib/SOAP/WSDL/Manual/ Cookbook.pod)並完成了它對HTTPS的描述:Crypt :: SSLeay是instaleld,並且都修改了SOAP :: WSDL :: Transport :: HTTP和SOAP :: Transport :: HTTP。

你可以給出任何可能出錯的提示嗎?

+0

我真的很抱歉對您的好感,但我不記得當時我在做什麼。看着我的日誌,似乎我奉命連接到SharePoint WS所以現在我想我需要NTLM身份驗證來獲取一些信息。這個項目已經很長時間了,所以我對你的努力感到非常抱歉。 –

回答

0

您可以從Web瀏覽器自由訪問WSDL文件嗎? 網絡中的其他人可以訪問它而沒有任何問題嗎?

也許託管WSDL文件中的Web服務器需要基本或一些其他種類的認證......

0

如果沒有必要,我不建議你使用Perl作爲Web服務客戶端。正如你知道的, perl是一種開源語言,儘管它支持soap協議,但它的支持似乎並不標準。首先,它的文檔不是很清楚,並且它的支持有時是有限的。最後,bug總是存在於這裏那裏。

因此,如果您必須使用wsdl2perl,則可以使用komodo步入代碼以查明發生了什麼。這正是我使用perl作爲Web服務客戶端時所做的。您知道,在https的後面是SSL,因此,如果您的SSL基於證書授權,則必須設置您的證書路徑和可信服務器證書列表。您最好使用基於Linux的firefox進行測試。因爲我知道,您可以設置firefox的證書路徑和firefox的可信證書列表。如果firefox可以成功地與您的Web服務器通信,那麼現在是時候調試您的perl客戶端了。

0

要調試使用Perl和SOAP的情況,請插入一個Web代理,以便您可以準確查看要傳遞的數據以及從服務器返回的響應。我希望你獲得401未經授權,但服務器響應中可能會有更多細節。

菲德勒http://docs.telerik.com/fiddler和查爾斯代理https://www.charlesproxy.com/都可以做到這一點。

0

你引用的錯誤信息似乎是從這一行: die $response->message() if $response->code() ne '200'; 和HTTP的世界,Unauthorized顯然是錯誤代碼401,這意味着你的網站要求輸入用戶名和密碼(最可能的是,一些網站可能「劫持「這個錯誤代碼來迎合其他條件,如源IP上的過濾器)。 你有他們嗎?

如果是這樣,你可以

    wdsl2perl
  • 運行後,發現在所創建的文件,其中set_proxy()被調用,並改變那裏的URL包括像用戶名和密碼:...->set_proxy('http://USERNAME:[email protected]/...')
  • 或您的在代碼中,實例化SOAP::WSDL對象後,在其上調用service(SERVICENAME)(你已經在你的WSDL文件中定義的服務),它爲您提供了一個新的對象,在其上調用transport()訪問底層傳輸對象上,您可以撥打proxy()與上面格式化的網址(是的它是proxy()這裏和以上set_proxy());或者你叫credentials(),而不是proxy()和傳遞4串:
    1. 「主機名:端口」
    2. 領域,如web服務器給出,但我認爲你可以把任何東西
    3. 用戶名
    4. 的密碼
相關問題