使用SOAP :: WSDL将SOAP功能从PHP迁移到Perl

时间:2009-11-19 17:55:05

标签: perl soap

我正在努力让SOAP在perl中运行。

在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 个答案:

答案 0 :(得分: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'有点hacky。

答案 1 :(得分:0)

我的应用程序中的SOAP :: Lite运气不错。用户名/密码组合是应该在HTTP层还是SOAP层进行身份验证?或者只是常规肥皂参数?

答案 2 :(得分:-1)

当我想要做SOAP时,我会找到XML::Compile