delphi idhttpserver搜索参数

时间:2015-06-26 12:51:47

标签: delphi get delphi-xe7

我想在Delphi中的idhttpserver中搜索/编译参数(GET)。 我确实有办法,但我想知道是否有更简单的方法。 这是我现在使用的方法:

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
para:string;
paraa:tstringlist;
begin
  for para in arequestinfo.params do
  begin
    paraa := tstringlist.Create;
    paraa.StrictDelimiter := True;
    paraa.Delimiter := '=';
    paraa.DelimitedText := para;
    if paraa[0] = '...' then
    begin
      if paraa[1] = '...' then
      begin
        ...
      end;
    end;
    paraa.Free;
  end;
end;

我正在使用delphi xe7

2 个答案:

答案 0 :(得分:2)

ParamsTStrings,已将Names[]ValueFromIndex[]属性编入索引:

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  name, value: string;
  I: index;
begin
  for i := 0 to ARequestInfo.Params.Count-1 do
  begin
    Name := ARequestInfo.Params.Names[i];
    Value := ARequestInfo.Params.ValueFromIndex[i];
    if Name = '...' then
    begin
      if Value = '...' then
      begin
        ...
      end;
    end;
  end;
end;

答案 1 :(得分:0)

在我看来,浪费资源使用字符串列表仅解析param=value对。更糟糕的是,您正在为每个迭代参数创建并销毁字符串列表实例,并且错过了使用try..finally进行内存泄漏的风险。我会做这样的事情:

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  Param: string;
  Parts: TArray<string>;
begin
  for Param in ARequestInfo.Params do
  begin
    Parts := Param.Split(['=']);
    // Parts[0] should now contain the parameter name
    // Parts[1] should now contain the parameter value
  end;
end;