2011-10-20 34 views
0

我目前正在編寫我自己的web服務器來處理cgi腳本。在我目前的測試perl腳本,我的代碼start_form的默認動作變量

print start_html("CGI Test Page"), 
    h1("CGI Test Page"), 
    h2("Post Test:"), 
    start_form(-method=>"POST",), 
    "Post Value: ",textfield('postKey'), 
    submit("Submit Post"), 
    end_form; 

正如你所看到的,START_HTML具有表單定義分配動作參數這一點。但有了這個代碼,我得到的是表單定義以下HTML輸出:

<form method="post" action="/cgitest.cgi%" enctype="multipart/form-data"> 

我收到奇怪的字符追加到行動變量的末尾。所以我的問題是這樣的:因爲我沒有在perl腳本中定義動作值,它使用哪個環境變量來定義它的動作?

+0

我無法用您的代碼重現。這應該意味着它是你的配置中的其他東西,而不是你的代碼的這一部分。 – AFresh1

+0

@ Afresh1哦,我已經知道這是我的配置中的東西。我沒有運行Apache或任何東西,我正在運行一個個人構建的服務器。如果沒有我提供整個服務器代碼,真的沒有辦法在您的最終重現它。因此,如果我知道此方法用作默認操作值的情況,我可以將問題隔離到發送給cgi腳本的特定環境變量。我的直覺告訴我它使用了REQUEST_URI環境變量,但是如果我在發送該變量之前做了一個printf的變量,它就不會像在html中一樣粘到末尾。 – AndyPerfect

回答

3

下面是相關的部分從CGI.pm source

if (defined $action) { 
    $action = $self->_maybe_escapeHTML($action); 
} 
else { 
    $action = $self->_maybe_escapeHTML($self->request_uri || $self->self_url); 
} 

正如你已經猜到了,如果你沒有定義的動作,它會嘗試使用$ENV{'REQUEST_URI'},但如果是空的,它使用的URL劇本。定義該URL的子例程是self_urlurl,因此希望這裏的源代碼可以幫助您確定在配置中額外的百分號來自哪裏。