我有一个通过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中执行某些操作?
答案 0 :(得分:1)
#!/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