2013-07-09 25 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