【问题标题】:Perl CGI passing variable in post with JSONPerl CGI 在 post 中使用 JSON 传递变量
【发布时间】:2013-11-05 18:43:19
【问题描述】:

我无法让以下内容正常工作并且已经没有想法了。我之前成功使用过这个设置,但是在两个脚本之间有一个 JS 脚本,我目前不能使用那个实现。

第一个脚本用于通过 perl 脚本从用户那里收集数据,它应该将数据发送到脚本二的 CGI 参数,但它要么没有传递值,要么它们为空。我确实收到了 200 HTTP 响应,因此在第二个脚本上执行不是问题。

脚本 1:

#!/usr/bin/perl

        use LWP::UserAgent;

        my $ua = LWP::UserAgent->new;

        my $server_endpoint = "http://urlthatisaccessable.tld/script.pl";   

# set custom HTTP request header fields
my $req = HTTP::Request->new(POST => $server_endpoint);
$req->header('content-type' => 'application/json');

# add POST data to HTTP request body
my $post_data = '{ "name": "Dan" }';
$req->content($post_data);

my $resp = $ua->request($req);
if ($resp->is_success) {
    my $message = $resp->decoded_content;
    print "Received reply: $message\n";
}
else {
    print "HTTP POST error code: ", $resp->code, "\n";
    print "HTTP POST error message: ", $resp->message, "\n";
}

脚本 2:

#!/usr/bin/perl
# Title Processor.pl

use CGI;

my $cgi = CGI->new;                  
my $local = $cgi->param("name");         

print $cgi->header(-type => "application/json", -charset => "utf-8");
print "$local was received"; 

输出:

#perl stager.pl 
Received reply:  was received

所以收到 200 并且 $local 变量为空。我将它打印到日志文件并插入了一个空行。

在此先感谢您提供的帮助。

【问题讨论】:

  • 看起来您将非 urlencoded 参数传递给脚本,请参阅perldoc.perl.org/CGI.html#HANDLING-NON-URLENCODED-ARGUMENTS
  • 好吧,我已经到了一半,因为以下是有效的perl processor.pl name=test Content-Type: text/plain;已收到 charset=ISO-8859-1 测试,因此是非 urlencoded-argues 导致了问题。谢谢@Suic

标签: json perl post cgi


【解决方案1】:

来自CGI

如果 POST 数据的类型不是 application/x-www-form-urlencoded 或 multipart/form-data,则不会处理 POST 数据,而是在名为 POSTDATA 的参数中按原样返回。要检索它,请使用如下代码:

my $data = $query->param('POSTDATA');

因此,如果您想更改服务器以与现有客户端一起使用,请使用

my $local = $cgi->param("POSTDATA"); 

如果您想更改客户端以使用现有的服务器端,您需要创建一个“表单”

use HTTP::Request::Common qw( POST );

my $req = POST($server_endpoint,
   Content_Type => 'application/json',
   Content => [ name => $post_data ],
);

如果你有选择,前者(改变客户端)更简单。

【讨论】:

  • @ikegami 我将客户的更改交给了我们HTTP::Request::Common qw( POST ),因为这似乎更适合我的需求。再次感谢您的帮助
猜你喜欢
  • 2017-01-22
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2013-04-28
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
相关资源
最近更新 更多