我正在努力让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版本甚至没有发送用户/传递参数。我做错了什么?
答案 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。