使用SOAP将SOAP功能从PHP迁移到Perl :: WSDL
问题描述:
我很努力让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版本甚至没有发送用户/传递参数。我究竟做错了什么?
答
对于它的价值,我取得了认证,并设法得到的参数通过发送以下内容:
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'有点怪异。
答
我在我的应用程序中使用SOAP :: Lite的运气非常好。用户名/密码组合,是否应该在HTTP层或SOAP层进行身份验证?或只是普通的肥皂参数?
“只是不行”是不适合的方式来问,恕我直言。你能提供更多细节吗? – 2009-11-19 18:41:42
类似的问题到http://stackoverflow.com/questions/1748921/calling-functions-with-parameters-using-soap-with-perl – 2009-11-19 20:06:42
@Leonardo,我已经很简洁了,因为我可以!我真的不知道我可以提供更多的信息。我用tcpdump来查看原始请求,并且参数不在那里。我只是不知道下一步该怎么做。 – aidan 2009-11-20 09:49:57