2013-07-09 28 views
1

我无法使这项工作我不断收到一个400错误的请求响应发送JSON请求。任何帮助非常感谢,因为这是我第一次尝试编码perl和使用JSON。我不得不删除一些敏感数据,因为这是工作。这个脚本的要点是简单地点击通过JSON发送POST数据的URL并打印响应。孤男寡女在Perl

#!/usr/bin/perl 
use strict; 
use warnings; 
use LWP::UserAgent; 
use HTTP::Request::Common; 
use JSON; 


my $ua = LWP::UserAgent->new; 
my $req = POST 'URL IS HERE'; 
my $res = $ua->request($req); 
my $json = '{"warehouseId": "ID", 
"tagMap": 
    {"cameraId":["Name of camera"] 
    }, 
"searchStartTimeStamp": 0, 
"searchEndTimeStamp": 100000000000000, 
"pageSize": 1, 
"client": 
    {"id": "username", 
    "type": "person"} 
}'; 


$req->header('Content-Type' => 'application/json'); 
$req->content($json); 


    if ($res->is_success) { 
print $req->content($json); 

    print $res->content; 
} else { 
    print $res->status_line . "\n"; 
} 
exit 0; 
+0

这是从脚本输出“400错误的请求” – root

回答

9

在完全填充它之前执行请求!该行并请求:

my $res = $ua->request($req); 

但几行后,你填写一些字段:

$req->header('Content-Type' => 'application/json'); 
$req->content($json); 

尝试更换围绕:

my $json = ...; 

my $ua = LWP::UserAgent->new; 
my $req = POST 'URL IS HERE';  
$req->header('Content-Type' => 'application/json'); 
$req->content($json); 

my $res = $ua->request($req); 

唉,别提$res->content 。该方法的价值通常不是可用的。您总是

$res->decoded_content; 
+0

感谢您的快速答复!在交换它们并更改为decode_content之后,现在这是运行脚本的输出。 全局符号“$ REQ”需要在lwp.cgi行明确包名9. 全局符号“$ REQ”需要在lwp.cgi行明确包名10 全局符号“$ JSON”需要在明确的LWP包名。 cgi第10行。 – root

+0

@root你忘了分号吗?此外,在将其放入请求之前,您仍然需要声明并初始化'$ json'。 – amon

+0

我所做的是移动两个$ REQ线要低于使用部分 – root