我想出了一种使用经过身份验证的请求输出结果的方法。由于请求输出xml内容以及标头响应,即:
HTTP/1.1 200 OKConnection: closeServer: Jetty(8.y.z-SNAPSHOT)Content-Type: application/xmlClient-Date: Wed, 30 Jul 2014 14:49:12 GMTClient-Peer: 127.0.0.1:8080Client-Response-Num: 1<?xml version... <project> .... ....</project>
我使用正则表达式 仅 提取输出的xml部分并将其保存到文件中。从那里,我使用LibXML的 parse_file
方法来解析新写入的文件。(我有一个单独的子例程,该例程使用 findnodes
方法提取我想提取的特定节点。由于该解决方案处理了我遇到的身份验证问题,所以我没有发布它)。
解:
use strict;use warnings;use XML::LibXML;use Path::Class;use LWP;use HTTP::cookies;my $serverXmlUrl = "http://localhost:8080/job/jobName/config.xml";my $uagent = LWP::UserAgent->new(cookie_jar => HTTP::cookies->new());my $request = HTTP::Request->new( GET => $serverXmlUrl );$request->authorization_basic( 'UserName', 'Password' );my $result = $uagent->request($request);if ( !$result->is_success ) { print "Failedn";} else { print "Success!n"; # Create new file to write to my $dir = dir("."); my $file = $dir->file("job.xml"); my $file_handle = $file->openw(); my $xml_content = $result->as_string; # full result output # Regex to store only xml content $xml_content =~ s/.*(<?xml.*)/$1/s; # Save xml_content to file $file_handle->print($xml_content); $file_handle->close(); # Parse newly written file print "Parsing file... n"; my $parser = XML::LibXML->new(); my $doc = $parser->parse_file($file); print $doc;}


