【问题标题】:Needing to send a JSON request in perl需要在 perl 中发送 JSON 请求
【发布时间】:2013-07-09 16:25:06
【问题描述】:

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

#!/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;

【问题讨论】:

  • 这是脚本“400 Bad Request”的输出

标签: json perl perl-module


【解决方案1】:

在完全填充之前执行请求!此行执行请求:

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;

【讨论】:

  • 感谢您的快速回答!在交换它们并更改为 decoded_content 之后,这现在是运行脚本的输出。全局符号“$req”需要在 lwp.cgi 第 9 行显示包名。全局符号“$req”需要在 lwp.cgi 第 10 行显示包名。全局符号“$json”需要在 lwp.cgi 第 10 行显示包名.
  • @root 你忘记分号了吗?此外,您仍然需要在将$json 放入您的请求之前声明并初始化它。
  • 我所做的是将两条 $req 行移到使用部分下方
  • @root 这显然行不通。我用示例代码更新了我的帖子。
  • 太棒了,我不得不将其余的装饰也移到上面。再次感谢您的帮助!你是一个救生员!
猜你喜欢
  • 2019-03-04
  • 1970-01-01
  • 2018-02-16
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 2015-12-04
  • 1970-01-01
相关资源
最近更新 更多