標籤:http io os ar 使用 for sp div on
項目中的需要發送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的支援比較好,實現也簡單。
perl發送SOAP請求