在 perl 中读取没有 CGI 模块的 cgi raw post 数据

Read cgi raw post data without CGI module in perl

在我的服务器上,我没有安装 CGI 是否可以在没有该模块的情况下获取原始 Post 数据?我已经尝试检查 CGI.pm 的源代码,但没有找到任何东西。

您可以通过从 STDIN 读取来提取 POST 数据。 (Viewing raw POST data)

paramExtractor.cgi

#!/usr/bin/perl

use strict;
use warnings;

my $buffer = '';
if($ENV{CONTENT_LENGTH}) { read(STDIN,$buffer,$ENV{CONTENT_LENGTH}); }
print "Content-type: text/plain\n\n";
print 'Post data is (' . length($buffer) . " chars):\n";
if( ! length($buffer) ) { $buffer = '[No POST data received]'; }
print $buffer;
exit;

form.html

<form method="post" action="http://127.0.0.1/paramExtractor.cgi">
<table cellpadding="3">
<tr>
<td>Name:</td>
<td><input type="text" name="name" style="width:200px;"></td>
</tr><tr>
<td>Email:</td>
<td><input type="text" name="email" style="width:200px;"></td>
</tr><tr>
<td valign="top">Message:</td>
<td><textarea name="message" style="width:200px; height:75px;"></textarea></td>
</tr><tr>
<td> </td>
<td><input type="submit" style="width:200px;"></td>
</tr>
</table>
</form>