代码之家  ›  专栏  ›  技术社区  ›  aidan

使用SOAP::WSDL将SOAP功能从PHP迁移到Perl

  •  1
  • aidan  · 技术社区  · 15 年前

    $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版本甚至没有发送user/pass参数。我做错了什么?

    3 回复  |  直到 15 年前
        1
  •  4
  •   aidan    15 年前

    值得一提的是,我实现了身份验证,并通过以下方式成功获取发送的参数:

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

    有没有更好的方法达到同样的效果?我意识到覆盖“获取基本凭证”有点不太正常。

        2
  •  0
  •   Aquatoad    15 年前

    我在我的应用程序中使用SOAP::Lite非常幸运。用户名/密码组合,应该在HTTP层还是SOAP层进行身份验证?或者只是常规的soap参数?

        3
  •  -1
  •   brian d foy    15 年前