2015-12-25 67 views
0

在我的服務器上,我沒有安裝CGI,是否可以在沒有該模塊的情況下獲取原始發佈數據?我試着檢查CGI.pm的源代碼,但沒有發現任何問題。閱讀perl中沒有CGI模塊的cgi原始發佈數據

+3

有沒有你不能只安裝一個特別的原因? (除了使用[不鼓勵](https://metacpan.org/pod/CGI#CGI.pm-HAS-BEEN-REMOVED-FROM-THE-PERL-CORE)贊成[更現代化的選擇] (https://metacpan.org/pod/CGI::Alternatives)。)在CGI協議中,簡單地從STDIN中讀取POST數據,但是從頭開始編寫自己的參數解析代碼似乎是一個壞主意。 – ThisSuitIsBlackNot

+0

@ThisSuitIsBlack不能安裝任何東西,它是共享主機。我試圖從STDIN讀取數據,但它是空的。 – jcubic

+0

@ThisSuitIsBlack畢竟STDIN沒有閱讀過。即使在共享主機上: – jcubic

回答

2

您可以通過從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> 
+0

我認爲它應該是'$ ENV {'CONTENT_LENGTH'}' – jcubic

+4

@jcubic,無用的引號是沒用的。 – ikegami