2011-10-19 11 views
1

私はIndy10を使用しています。私のサーバーはフォームポストを処理しています。 ARequestInfo.FormParamsには、解析されていないフォームパラメータが正しく含まれています。しかしARequestInfo.Params.countは0です。私は持っている方法はありますか?ARequestInfo.Paramsには解析されたフォームパラメータがありますか?または、構文解析する方法がありますARequestInfo.FormParams名前/値のペアのTIdHTTPRequestInfo.FormParams

これは、オブジェクトに既にカプセル化されている必要がある場合は、自分の解析ルーチンを作成する必要があるようです。または、おそらく私は方法が不足しています。

更新私たちのLAN内のポストを行うときに見つけたいくつかのより多くの掘り出し物があります。しかし、ポストが私たちのLANの外のブラウザから行われた場合、それはしません。

答えて

3

TIdHTTPServerParseParamsプロパティを設定してください。

またはDecodeAndSetParamsという名前の保護されたメソッドにアクセスするためのTIdHTTPRequestInfoクラスの子孫を作成して、自分でパラメータを解析することができます。

これは例です。

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

私はそれを試みましたが、まだ動作しません。しかし、LAN内とLAN外からのPostについての私の更新を見てください。しかし、そのプロパティについて知っておくと良いです。 –

+0

別の質問の候補者のようです。私は 'ParseParams'プロパティの実装を見てきました。それは私にとってうまく見えます(私はそれをテストしていません)。あなたがコンテンツタイプ 'application/x-www-form-urlencoded'を持っているなら、UnparsedParams'プロパティに解析されていないパラメータがあるはずです。何か他のものがあれば、あなたの要求の' QueryParams'プロパティでそれを見るべきです。 – TLama

+0

あなたが言及したように、あなたのリクエスト情報の 'FormParams'プロパティでも、解析されていないパラメータ(' application/x-www-form-urlencoded'の場合)を見ることができます。多かれ少なかれ、 'TIdHTTPServer.ParseParams'がTrueに設定されていると、それらの構文解析が機能します。 – TLama

関連する問題