2011-10-19 48 views
1

我正在使用Indy10。我的服務器正在處理表單帖子。 ARequestInfo.FormParams正確包含未分析的表單參數。但是ARequestInfo.Params.count是0.有沒有辦法我可以有ARequestInfo.Params有解析的表單參數嗎?或者有沒有辦法解析ARequestInfo.FormParamsTIdHTTPRequestInfo.FormParams在名稱/值對中

看來我必須編寫自己的解析例程,這應該已經封裝在對象中。或者我可能缺少一種方法。

更新做更多的挖掘我發現當我們在局域網內做一個職位一切正常。但是,當我們的局域網之外的瀏覽器完成後,它不會。

回答

3

嘗試在您的TIdHTTPServer處設置ParseParams屬性。

或者您可以創建TIdHTTPRequestInfo類的後代,以訪問名爲DecodeAndSetParams的受保護方法來自行解析參數。

這裏是例子。

uses 
    IdCustomHTTPServer; 

type 
    THTTPRequest = class(TIdHTTPRequestInfo); 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Request: THTTPRequest; 
begin 
    Request := THTTPRequest.Create; 
    Request.DecodeAndSetParams('firstparam=1&secondparam=2&thirdparam=3'); 

    ShowMessage('Param count: ' + IntToStr(Request.Params.Count) + 
       sLineBreak + sLineBreak + 
       Request.Params[0] + sLineBreak + 
       Request.Params[1] + sLineBreak + 
       Request.Params[2] + sLineBreak 
      ); 

    Request.Free; 
end; 
+0

我試過,但仍然無法正常工作。但請參閱關於從局域網內部和局域網外部執行「發佈」的更新。儘管知道這個屬性是很好的。 –

+0

這聽起來像是另一個問題的候選人。我已經看過ParseParams屬性實現,它對我來說看起來很好(我還沒有測試過)。如果你有內容類型'application/x-www-form-urlencoded',那麼你應該看到'UnparsedParams'屬性中的未解析參數,如果有其他內容,你應該在請求的QueryParams屬性中看到它。 – TLama

+0

正如你所提到的,你也可以在你的請求信息中的FormParams屬性中看到unparsed參數(在你的應用程序/ x-www-form-urlencoded中)。當你將'TIdHTTPServer.ParseParams'設置爲True時,或多或少的解析它們。 – TLama