2015-11-03 3 views
0

У меня есть сценарий Perl, который делает сообщение на веб-сайте, чтобы добавить клиента для выставления счетов. Эти части отлично работают, и я могу проверить ошибки/успех. Теперь мне нужно проанализировать содержимое, которое возвращается.Perl, как разобрать контент HTTP-ответа

use strict; 
use warnings; 

use LWP::UserAgent; 

my $ua = LWP::UserAgent->new; 
my $res = $ua->post('https://testserver', [ 
    'UMkey' => "test key", 
    'UMname' => "Example Tester", 
    'UMcard' => "4000100011112224", 
    'UMexpir' => "0919", 
    'UMcvv2' => "123", 
    'UMamount' => "5.50", 
    'UMinvoice' => "123456", 
    'UMstreet' => "1234 Main Street", 
    'UMzip' => "12345", 
    'UMcommand' => 'cc:sale', 
    'UMaddcustomer' => 'yes', 
    'UMbillcompany' => 'ed', 
    'UMbillfname' => 'Tester', 
    'UMbilllname' => 'Tofu', 
]); 

print "\n\nresult: ".$res->content; 
print "\n"; 

результат -

result: UMversion=2.9&UMstatus=Approved&UMauthCode=006444&UMrefNum=100020848&UMa 
vsResult=Address%3A%20Match%20%26%205%20Digit%20Zip%3A%20Match&UMavsResultCode=Y 
YY&UMcvv2Result=Match&UMcvv2ResultCode=M&UMresult=A&UMvpasResultCode=&UMerror=Ap 
proved&UMerrorcode=00000&UMcustnum=50405&UMbatch=309&UMbatchRefNum=1640&UMisDupl 
icate=N&UMconvertedAmount=&UMconvertedAmountCurrency=840&UMconversionRate=&UMcus 
tReceiptResult=No%20Receipt%20Sent&UMprocRefNum=&UMcardLevelResult=A&UMauthAmoun 
t=5.5&UMfiller=filled 

мне нужно разобрать результат и вернуть только определенные поля, но я не уверен, как это сделать. Или есть способ, которым я могу просто вытащить определенные пары значений из контента?

ответ

1

Предполагая, что разрывы строк в выводе, который вы отправили, были добавлены вами, а не в возвращаемой строке, содержимое ответа находится в формате application/x-www-form-urlencoded.

Вы можете (mis-) использовать URI, чтобы разобрать его.

use URI qw(); 

my %response_data = URI->new("?".$response->content(), "http")->query_form(); 

Последнее хак решения включает URI::Escape «s uri_unescape.

use URI::Escape qw(uri_unescape); 

my %response_data = map { uri_unescape($_) } split(/[&=]/, $response->content()); 
Смежные вопросы