2009-11-19 83 views
1

我很努力讓SOAP在perl中工作。使用SOAP將SOAP功能從PHP遷移到Perl :: WSDL

在PHP中,它完美地工作,沒有任何問題。現在我試圖在Perl中做同樣的事情。

功能PHP是:

$client = new SoapClient("http://thirdpartyurl.com/api.aspx?WSDL"); 
$info = $client->GetSomeInfo(array('username' => 'myusername', 'password' => 'mypassword')); 

偉大的工程,但我不能讓它在Perl的工作。我嘗試過SOAP :: Lite,但沒有取得任何進展。我正在嘗試使用SOAP :: WSDL:

use SOAP::WSDL; 
my $wsdl = SOAP::WSDL->new(wsdl => 'http://thirdpartyurl.com/api.aspx?WSDL'); 
my $info = $wsdl->call('GetSomeInfo', 'username', 'myusername', 'password', 'mypassword'); 

哪一個不起作用。 我查看了原始請求,並且perl版本甚至沒有發送用戶/傳遞參數。我究竟做錯了什麼?

+3

「只是不行」是不適合的方式來問,恕我直言。你能提供更多細節嗎? – 2009-11-19 18:41:42

+0

類似的問題到http://stackoverflow.com/questions/1748921/calling-functions-with-parameters-using-soap-with-perl – 2009-11-19 20:06:42

+0

@Leonardo,我已經很簡潔了,因爲我可以!我真的不知道我可以提供更多的信息。我用tcpdump來查看原始請求,並且參數不在那裏。我只是不知道下一步該怎麼做。 – aidan 2009-11-20 09:49:57

回答

4

對於它的價值,我取得了認證,並設法得到的參數通過發送以下內容:

use SOAP::Lite; 
my $service = SOAP::Lite->proxy($service_url)->uri($service_url); 

sub SOAP::Transport::HTTP::Client::get_basic_credentials { 
    return 'myusername' => 'mypassword'; 
} 

my $result = $service->insert(
    SOAP::Data->name(
     'data' => \SOAP::Data->value(
      SOAP::Data->name(
       'item' => \SOAP::Data->value(
        SOAP::Data->name('key' => 'name'), 
        SOAP::Data->name('value' => 'new_campaign_x') 
       ) 
      ) 
     ) 
    )->type('Map') 
); 

是否有更好的方法來達到同樣的效果?我意識到覆蓋'get_basic_credentials'有點怪異。

0

我在我的應用程序中使用SOAP :: Lite的運氣非常好。用戶名/密碼組合,是否應該在HTTP層或SOAP層進行身份驗證?或只是普通的肥皂參數?