2009-12-07 34 views
-2

上的GET請求在試圖解決我張貼在這個問題上的問題,任何問題:是否有處理POST請求的服務器

Is it possible to send POST parameters to a CGI script using a system() call?

迄今唯一成功解決的問題是誘騙環境認爲請求是GET。我通過將POST參數轉換爲查詢字符串,將該字符串保存在默認環境變量中,然後更改環境變量來告知服務器此請求用於GET的方法。

$ENV{'QUERY_STRING'} = $long_parameter_string . '&' . $ENV{'QUERY_STRING'}; 
$ENV{'REQUEST_METHOD'} = 'GET'; 

system {$perl_exec} $cgi_script; 

我基本上欺騙CGI模塊從QUERY_STRING環境變量,而不是從標準輸入,它會試圖讀取POST請求讀取。

此方法似乎工作到目前爲止,但我擔心意想不到的影響。

我的問題是,你是否看到任何潛在的問題呢?

+0

要說清楚,我並不是試圖就這是否是「正確」的事情展開哲學爭論。我想知道可能出現並需要測試的潛在問題。這只是我遇到的一個奇怪的現實世界問題的實用解決方案。 – 2009-12-07 16:05:38

+0

我改變了這個社區維基,因爲我不認爲這必然是一個正確的答案。 – 2009-12-07 16:12:31

+0

您似乎已經忽略了將流水管打開並寫入流程的建議。如果你想測試一個POST,停止嘗試強制system()進入它。 Perl工具箱中還有許多其他工具。 – 2009-12-07 16:26:02

回答

1

由於GET的大小限制比POST小很多,因此您會遇到較大提交和文件上傳的問題。如果你在談論可預測的少量數據,你應該沒問題。

+0

那麼,原來的問題集中在相當大的請求。但是,我認爲GET大小的限制主要是大多數瀏覽器中URL限制的結果。我不認爲Perl的CGI模塊,也不看Linux環境變量在64位機器上運行時提供任何嚴重的大小限制。 就文件上傳而言,CGI模塊已經有機會處理該文件,並且臨時位置應該是參數中剩下的全部內容。如果我錯了,請糾正我。我現在正在測試這個過程。 – 2009-12-07 15:44:58

+0

非常正確 - 限制是URL長度限制。 – Fenton 2009-12-08 07:53:01

+0

迄今爲止已選擇最佳答案,因爲它是唯一一個定義可能問題的問題,這是問題的要點。 – 2009-12-12 16:49:59

2

POST和GET 意味着完全不同的東西,你不應該「測試」任何方式。

相反,您應該使用Perl的LWP對預期的URL執行真正的POST。

use HTTP::Request::Common qw(POST); 
use LWP::UserAgent; 
$ua = LWP::UserAgent->new; 

my $req = POST 'http://www.perl.com/cgi-bin/BugGlimpse', 
       [ param1 => 'arbitrarily long blob', param2 => 'whatever' ]; 

print $ua->request($req)->as_string; 
+0

請參閱我原來的問題,上面有鏈接。 雖然我沒有這樣做,但有兩個原因。其一,我使用mod_rewrite將所有請求重定向到最終執行預期CGI腳本的文件。二,我可以在你建議的請求中加入一個特殊的參數或其他東西,以確保mod_rewrite被繞過,但這最終會導致比我更熟悉的請求時間。 – 2009-12-07 15:51:24

+1

你的評論是一個不容忽視的問題。 mod_rewrite與HTTP方法無關。 – 2009-12-07 15:54:11

+0

不,但它涉及到我原來的問題以及我首先以這種方式處理請求的原因。 – 2009-12-07 15:56:44