Получить документ XML, отправленный через HTTP POST в Perl - PullRequest
0 голосов
/ 08 марта 2012

У меня есть документ XML, отправляемый мне по HTTP POST:

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

Который я затем получаю в perl-скрипте с использованием функции param ():

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

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

и когда я получаю Dumper результат, я получаю:

$VAR1 = '<?xml version';

Кажется, что файл разбивается всякий раз, когда он сталкивается со знаком '='. Если я уберу первый знак eqauls для проверки, он просто сломается при следующем. Можно ли решить эту проблему только с той стороны, которая отправляет данные, избегая равных, или я могу что-то сделать в Perl?

Ответы [ 3 ]

1 голос
/ 08 марта 2012

Использование param('POSTDATA').

#!/usr/bin/perl -T
use strict;
use warnings FATAL => 'all';
use CGI qw();
my $cgi = CGI->new;
my $xml = $cgi->param('POSTDATA');
0 голосов
/ 08 марта 2012

Я так понимаю, ваш скрипт выглядит примерно так:

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

param() ожидает URL-кодированный список параметров в строке запроса (GET или POST), а в контексте списка возвращает именапараметры.

Если вы просто хотите получить необработанные данные из строки запроса (и никогда не ожидаете обработки данных формы), используйте query_string() и отправьте XML с помощью запроса GET.

Вы можете читать необработанные данные POST через STDIN без использования CGI, но есть предостережения.

0 голосов
/ 08 марта 2012

Вы не даете нам много кода для просмотра, поэтому мы можем только догадываться, в чем проблема.Я предполагаю, что проблема лежит на отправляющей стороне.Все данные в HTTP POST должны быть закодированы в URL.А так как '=' - это небезопасный символ, который должен быть закодирован, это может стать вашей проблемой.

Для получения дополнительной информации о кодировании URL и HTTP POST посмотрите: введите описание ссылки здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...