2015-12-25 7 views
0

На моем сервере у меня нет установленного CGI, можно ли получить данные Raw Post без этого модуля? Я пытаюсь проверить исходный код для CGI.pm, но не нашел anythig.Чтение данных cgi raw post без модуля CGI в perl

+3

Есть ли конкретная причина, вы не можете просто установить его? (Помимо того, что его использование [обескуражено] (https://metacpan.org/pod/CGI#CGI.pm-HAS-BEEN-REMOVED-FROM-THE-PERL-CORE) в пользу [более современных альтернатив] (https://metacpan.org/pod/CGI::Alternatives).) В протоколе CGI данные POST просто считываются из STDIN, но написание собственного кода синтаксического анализа параметров с нуля кажется плохой идеей. – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot Я ничего не могу установить, это общий хостинг. Я пытаюсь читать данные из STDIN, но он пуст. – jcubic

+0

@ThisSuitIsBlackНе читайте от STDIN, работа в конце концов. – jcubic

ответ

2

Вы можете извлечь данные POST, прочитав STDIN. (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> 
+0

Я думаю, что это должно быть '$ ENV {'CONTENT_LENGTH'}' – jcubic

+4

@jcubic, бесполезные цитаты бесполезны. – ikegami