将 authHeader 添加到 Perl SOAP::Lite 请求 [英] Adding authHeader to Perl SOAP::Lite request

查看:65
本文介绍了将 authHeader 添加到 Perl SOAP::Lite 请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在向这个有效的 WSDL 创建请求时遇到了一些问题;它需要 authHeaders 并且我没有太多运气添加它们.这就是我正在尝试的:

<预><代码># 为服务创建代理我的 $soap = SOAP::Lite->service($wsdl);# 添加故障处理程序$soap->on_fault(sub { # SOAP 错误处理程序我的 $soap = shift;我的 $res = shift;# 将错误映射到异常if(ref($res) eq '') {死($res);}别的 {死($res->故障字符串);}返回新的 SOAP::SOM;});# 认证请求头我的@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));# 请求方法打印 $soap->getCompanyInfo('NB', @headers);

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

需要字符串值而不是 SOAP::Header 引用

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

解决方案

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

<预><代码># 创建请求头我的 $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('')));# 创建数据作为方法参数传递我的 $params = SOAP::Data->name('ns:email')->value($s7user)->type('');# 请求方法$soap->call('checkLogin', $params, $authHeader);

为了使用 call 方法,您需要在您的soap 对象上定义一个代理(端点).希望这对其他人有所帮助.

I am having some trouble creating a request to this WSDL that works; it requires authHeaders and I am not having much luck adding them. This is what I am trying:


# 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);

The response I get when doing this is:

String value expected instead of SOAP::Header reference

The method I am requesting has two string parameters, both optional. And suggestions?

解决方案

I was able to get help form the SOAP::Lite mailing list. If I want to pass my own headers, I have to use the call method instead of the actually method name.


# 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);

In order to use the call method, you will need to define a proxy (endpoint) on your soap object. Hope this is helpful for someone else down the road.

这篇关于将 authHeader 添加到 Perl SOAP::Lite 请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆