使用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[0];
     my $result = "";
     my $content = '...' ;
     if($httpUrl =~ /^https/){
     my $certDir = $ARGV[1];
          $result = `curl -k --silent --cacert $certDir/***.pem --cert $certDir/***.pem '$httpUrl' -d '$content'`;
     }else{
          $result = `curl  --silent '$httpUrl' -d '$content'`;
     }
     此種方法依賴於curl命令,帶對SSL的支持比較好,實現也簡單。
相關文章
相關標籤/搜索