如何在Perl中的Soap :: Lite上正确地死掉

时间:2018-08-17 06:21:51

标签: perl

我编写了一个Perl脚本,该脚本使用Soap::Lite进行连接,并从Web服务收集数据并更新数据库。这很有效,直到密码被锁定并得到一个server 500 error,这才是我的问题所在。在失败的情况下,如何让Soap::Lite查询die连接,因此它不会继续执行脚本的其余部分吗?

  .....
  my $host   = "hostname";
  my $user   = "user";
  my $pass   = "pass";
     $soap_proxy  = "https://" . $user . ":" . $pass . "@" . $host . ":8090/services/ApiService";
     $uri    = "http://api.config.common.com";

     $client                                    =  new SOAP::Lite
       uri                                           => $uri,
       proxy                                         => $soap_proxy,
       autotype                                      => 0;
  my $soap_respons = $client->getSomething();
  ....

我已经尝试了常规的or die $!,但是与其他查询不同,die仍然会继续执行其余的脚本。

根据CPAN上的SOAP::Lite示例,您可以使用:

if ($@) {
   die $@;
 }

但是我不知道该放在哪里。我直接在my $soap_respons下尝试过,但仍然没有死。

2 个答案:

答案 0 :(得分:1)

如果出现错误,

SOAP::Lite查询将为fault提供faultstring结果,类似的事情应该起作用。

die $soap_respons->faultstring if ($soap_respons->fault);
print $soap_respons->result, "\n";

答案 1 :(得分:1)

您可以设置on_fault回调。这样,您不必检查每个响应。

$client->on_fault(sub { die($_[1]) });