我在创建一个有效的WSDL请求时遇到了一些麻烦;它需要authHeaders,我没有太多运气添加它们。这就是我想要的:
# make proxy for the service
my $soap = SOAP::Lite->service($wsdl);
# add fault hanlder
$soap->on_fault(
sub { # SOAP fault handler
my $soap = shift;
my $res = shift;
# Map faults to exceptions
if(ref($res) eq '') {
die($res);
}
else {
die($res->faultstring);
}
return new SOAP::SOM;
}
);
# authentication request headers
my @headers = (
SOAP::Header->name('user')->value('myemail@whatever.com')->uri($apins),
SOAP::Header->name('password')->value('mypassword')->uri($apins),
SOAP::Header->name('appName')->value('TestApp')->uri($apins),
SOAP::Header->name('appVersion')->value('0.02')->uri($apins)
);
# request method
print $soap->getCompanyInfo('NB', @headers);
我这样做的反应是:
期望字符串值而不是SOAP :: Header引用
我请求的方法有两个字符串参数,都是可选的。和建议?
答案 0 :(得分:6)
我能够从SOAP :: Lite邮件列表中获得帮助。如果我想传递自己的标题,我必须使用调用方法而不是实际的方法名称。
# create header for requests
my $authHeader = SOAP::Header->name("xsd:authHeader" =>
\SOAP::Header->value(
SOAP::Header->name('xsd:user')->value($s7user)->type(''),
SOAP::Header->name('xsd:password')->value($s7pass)->type(''),
SOAP::Header->name('xsd:appName')->value('TestApp')->type(''),
SOAP::Header->name('xsd:appVersion')->value('0.03')->type('')
));
# create data to pass as method paramaters
my $params = SOAP::Data->name('ns:email')->value($s7user)->type('');
# request method
$soap->call('checkLogin', $params, $authHeader);
为了使用call方法,您需要在soap对象上定义代理(端点)。希望这对其他人有所帮助。