2011-10-19 3 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

그리고 언급 한대로 (application/x-www-form-urlencoded의 경우) 매개 변수가 요청 정보의 FormParams 속성에서도 분석되지 않은 것을 볼 수 있습니다. 'TIdHTTPServer.ParseParams'가 True로 설정되면, 파싱은 다소 효과가 있습니다. – TLama