【问题标题】:Migrating SOAP functionality from PHP to Perl using SOAP::WSDL使用 SOAP::WSDL 将 SOAP 功能从 PHP 迁移到 Perl
【发布时间】:2009-12-04 02:46:54
【问题描述】:

我正在努力让 SOAP 在 perl 中工作。

在 PHP 中它可以完美运行,并且没有任何问题。现在我正在尝试在 Perl 中做同样的事情。

PHP 的功能是:

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

【问题讨论】:

  • “只是不起作用”不是一个合适的提问方式,恕我直言。你能提供更多细节吗?
  • @Leonardo,我已经尽量简洁了!我真的不知道我还能提供什么更多信息。我已经使用 tcpdump 来查看发出的原始请求并且参数不在那里。我只是不知道下一步该尝试什么。

标签: perl soap


【解决方案1】:

不管怎样,我实现了身份验证,并设法通过以下方式获取发送的参数:

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

有没有更好的方法来达到同样的效果?我意识到覆盖“get_basic_credentials”有点老套。

【讨论】:

    【解决方案2】:

    在我的应用程序中使用 SOAP::Lite 非常好运。用户名/密码组合,应该是在 HTTP 层还是 SOAP 层进行身份验证?还是只是普通的肥皂参数?

    【讨论】:

      【解决方案3】:

      当我想做 SOAP 时,我会联系 XML::Compile

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 2012-05-20
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多