xml - Perl 通过 HTTP 解析 XML 文件并增加几行

标签 xml perl http

我正在尝试编写一个脚本,该脚本可以从远程服务器的 XML 文件中收集信息。远程服务器需要身份验证。我能够进行身份验证,因为它使用基本身份验证,但由于 XML 文件之前的所有行,我似乎无法解析数据。有没有办法避免获取所有这些行并正确解析 XML 文件?

代码

#! /usr/bin/perl

use LWP::UserAgent;
use HTTP::Request::Common;

use XML::Simple;

$ua = LWP::UserAgent->new;

$req = HTTP::Request->new(GET => 'https://192.168.1.10/getxml?/home/');
$ua->ssl_opts(SSL_verify_mode => SSL_VERIFY_NONE); #Used to ignore certificate
$req->authorization_basic('admin', 'test');
$test = $ua->request($req)->as_string;

print $test;
# create object
my $xml = new XML::Simple;

# read XML file
my $data = $xml->XMLin("$test");

# access XML data
print $data->{status}[0]{productID};

响应

HTTP/1.1 200 OK
Connection: close
Date: Wed, 24 Sep 2014 01:12:20 GMT
Server: 
Content-Length: 252
Content-Type: text/xml; charset=UTF-8
Client-Date: Wed, 24 Sep 2014 01:11:59 GMT
Client-Peer: 192.168.1.10:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: XXXXXXXXXXXX
Client-SSL-Cert-Subject: XXXXXXXXXXXXX
Client-SSL-Cipher: XXXXXXXXXXXX
Client-SSL-Socket-Class: IO::Socket::SSL

<?xml version="1.0"?>
<Status>
  <SystemUnit item="1">
    <ProductId item="1">TEST SYSTEM</ProductId>
  </SystemUnit>
</Status>
:1: parser error : Start tag expected, '<' not found
HTTP/1.1 200 OK

最佳答案

$test = $ua->request($req)->as_string; 调用返回整个请求( header 加内容)的字符串表示形式。

将其更改为 $test = $ua->request($req)->content;

这将只返回内容,减去标题。

关于xml - Perl 通过 HTTP 解析 XML 文件并增加几行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26007103/

相关文章:

c# - 使用 WCF 从 MSMQ 队列接收任何 XML 消息?

regex - perl 脚本占用 100% cpu

perl - 已经使用严格时是否有必要使用警告?

java - 对使用同步适配器和内容提供程序同步多个表感到困惑

php - 如何在 http POST 请求中发送 HTML 代码?

c# - 如何使用 xml 创建 C# 对象

java - 如何防止 JAXB 在编码时绑定(bind) @XmlRootElement 的父类(super class)方法?

http - 往返时间 Http on non persistent, persistent, persistent with pipelining

java - xml 文件不更新。这是什么原因呢?

regex - 如何使用正则表达式和 sed (或等效的 unix 命令行工具)来修复 LaTeX 标题中的标题大小写?