2015-11-03 83 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格式。

您可能(错误)使用URI来解析它。

use URI qw(); 

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

最后hackish的解决方案涉及URI::Escapeuri_unescape

use URI::Escape qw(uri_unescape); 

my %response_data = map { uri_unescape($_) } split(/[&=]/, $response->content());