我必须在Perl中向某些Web服务发出SOAP请求。
详细说明我所拥有的:
这是SOAP的示例:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webeph/wsdl/">
<SOAP-ENV:Body>
<ns1:importSheetRequest>
<auth>
<!-- auth data (userId and apiKey) -->
</auth>
<EPH>
<!-- some custom params -->
</EPH>
<contract>true</contract>
</ns1:importSheetRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
到目前为止,这是Perl中的代码,但这很糟糕,我在寻找教程,但我不理解它,所以我会很乐意提供帮助。
my $soap = SOAP::Lite->soapversion('1.2')->new(
'service' => 'https://example.com/integration/webServices/api?wsdl',
'timeout' => 600
);
$soap->transport->timeout(600);
$soap->default_ns('https://example.com');
$soap->on_action(
sub
{ "https://example.com/integration/webServices/api?wsdl" }
);
my $request = $soap->call(
'importSheet',
SOAP::Data->name('userId')->value('123456'),
SOAP::Data->name('apiKey')->value('abcdefgh123456'),
SOAP::Data->name('contract')->value('true'),
);
my $result = $request ->result();
print Dumper($result);
我得到的错误是:
-服务描述为'https://example.com/integration/webServices/api?wsdl'的崩溃 已加载:401未经授权
所以我认为授权有问题,所以问题应该在此部分:
<auth>
<!-- auth data (userId and apiKey) -->
</auth>
所以这个:
SOAP::Data->name('userId')->value('123456'),
SOAP::Data->name('apiKey')->value('abcdefgh123456')
我认为应该嵌套在auth标记中,但我不知道这是否是问题以及如何解决。