寂寞大萝卜 发表于 2015-12-28 07:28:38

perl发送SOAP请求

项目中的需要发送SOAP消息来进行一些操作。由于SOAP协议是构建在HTTP协议之上的,因此通过发送HTTP请求也可以解决此问题。
此外,项目中还需要考虑对SSL协议的支持。

方法一:利用SOAP::Lite(perl的第三方库)来实现
   use SOAP::Lite;
   my $proxy='http://host:port/.../...?wsdl';
   my $soap=SOAP::Lite->proxy($proxy)->ns('...');
   my $response=$soap->call('...');

   由于不想引入第三方的库,后面就没有使用此方式。

方法二:利用LWP来实现
   use HTTP::Headers;   use HTTP::Request;
   use LWP::UserAgent;
   my $server = '...';

   #get soap request format
   my $content = '...' ;
   #set http header
   my $head=HTTP::Headers->new();
   $head->content_type('text/xml;charset=UTF-8');
   #set http request and send it
   my $request = HTTP::Request->new(POST,$server, $head );
   $request->protocol('HTTP/1.0');
   $request->content($content);
   my $userAgent = LWP::UserAgent->new();

   my $response= $userAgent ->request($request);

   由于LWP是perl自带的库,不存在使用第三方库的问题。但如果要支持SSL协议的,还是需要引入IO::Socket::SSL,Net::SSL等第三方库

方法三:利用curl命令来实现
   my $httpUrl = $ARGV;
   my $result = "";
   my $content = '...' ;
   if($httpUrl =~ /^https/){
   my $certDir = $ARGV;
          $result = `curl -k --silent --cacert $certDir/***.pem --cert $certDir/***.pem '$httpUrl' -d '$content'`;
   }else{
          $result = `curl--silent '$httpUrl' -d '$content'`;
   }
   此种方法依赖于curl命令,带对SSL的支持比较好,实现也简单。
页: [1]
查看完整版本: perl发送SOAP请求