接收通过Perl中的HTTP POST发送的XML文档

时间:2012-03-08 08:40:46

标签: xml perl http-post

我有一个通过HTTP POST发送给我的XML文档:

<?xml version="1.0" encoding="UTF-8" ?>
  <DeliveryNotification eventType="newMessage">
    <requestUid>sms9676187</requestUid>
    <sentMessageUid>sms29282896</sentMessageUid>
    ....
  </DeliveryNotification>

然后我使用param()子例程接收perl脚本:

#!/usr/bin/perl -w
use strict;
use CGI qw/param/;
use Data::Dumper;

my @xml = param();
warn Dumper(@xml);

当我倾倒结果时我得到了:

$VAR1 = '<?xml version';

只要文件遇到'='符号,它就会破坏文件。如果我删除第一个eqauls标志进行测试,它就会在下一个标志处中断。这只能从通过转义等于发送数据的那一方解决,还是可以在Perl中执行某些操作?

3 个答案:

答案 0 :(得分:1)

使用param('POSTDATA')

#!/usr/bin/perl -T
use strict;
use warnings FATAL => 'all';
use CGI qw();
my $cgi = CGI->new;
my $xml = $cgi->param('POSTDATA');

答案 1 :(得分:0)

我认为你的脚本看起来像是:

#!env perl
use CGI qw( :standard );
use Data::Dumper;
my @xml = param();
warn Dumper(@xml);

param()期望查询字符串(GET或POST)中的url编码参数列表,并在列表上下文中返回参数的名称。

如果您只想查询查询字符串中的原始数据(并且从不期望处理表单数据),请使用query_string()并通过GET请求提交XML。

You can read the raw POST data via STDIN without using CGI, but there are caveats.

答案 2 :(得分:-1)

您没有给我们提供太多代码,因此我们只能猜出问题是什么。 我在猜测问题出在发送方面。 HTTP POST中的所有数据都需要进行URL编码。 因为'='是一个不安全的角色,需要编码才是你的问题。

有关url编码和HTTP POST的更多信息,请查看: enter link description here