perl - 将 authHeader 添加到 Perl SOAP::Lite 请求

标签 perl soap

我在创建对这个有效的 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);

这样做时我得到的响应是:

String value expected instead of SOAP::Header reference

我请求的方法有两个字符串参数,都是可选的。和建议?

最佳答案

我能够从 SOAP::Lite 邮件列表中获得帮助。如果我想传递我自己的 header ,我必须使用调用方法而不是实际的方法名称。


# 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 对象上定义一个代理(端点)。希望这对以后的其他人有帮助。

关于perl - 将 authHeader 添加到 Perl SOAP::Lite 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4683073/

相关文章:

php - 具有多种服务类型的 Fedex PHP soap api?

perl - 使用独立的 Perl FastCGI/FCGI Web 服务器在 Perl 中测试 FastCGI 脚本

linux - 如果行匹配,如何在目标文件中标记行

linux - 在 ubuntu 10.04 上将 php 降级到 5.2 后,Pear 下载软件包而不是安装

xml - Golang marshal 嵌套 xml 标签

php soap 错误获取 http header

perl - 使用 Perl,如何用换行符替换文件中的所有空格?

perl - Perl 中最快的日期到时间戳转换

java - 使用 perl 调用 jar 并使用 STDIN 传递变量

java - com.sun.org.apache.xerces.internal.dom.ElementImpl 的替代方案