我正在为基于平板电脑的 HTML 客户端编写基于 Delphi 的 Windows 服务器。
大多数文件都是未经处理的,就像您对 Web 服务器的期望一样,但少数特殊关键字被解释为与服务器上其他软件交互的特殊命令。
大多数时候,一切都很好。但随后,似乎是随机的,我会遇到访问冲突,这将是在尝试检索其中一个 GET 参数时。
这让我发疯,所以我将整个事情封装到一个函数中,然后开始测试TIdHTTPRequestInfo数据是否存在(此处显示为类中的公共属性Request):
function TELSCommand.GETValue(key:AnsiString):AnsiString;
begin
if not Assigned(Request) then begin
Log.e('WHERE IS REQUEST?');
Result := '';
Exit;
end;
if not Assigned(Request.Params) then begin
Log.e('WHERE IS REQUEST PARAMS?');
Result := '';
Exit;
end;
if (Request.Params.IndexOfName(key) >= 0) then
Result := Request.Params.Values[key]
else
Result := '';
end;
我实际上没想到会触发两个 Assigned() 检查中的任何一个,但是,随机地,第二个会被触发,我会看到“请求参数在哪里?” 按 F5 后在我的日志文件中(慢慢地,我没有敲击服务器)。
当我在块内抛出一个断点并在到达该点时检查 Request 的值时,整个TIdHTTPRequestInfo 结构都填充了默认的空数据。如果我检查浏览器以查看它发送的请求,这就是我所期望的……(例如,通常只是对“ /details?id=222 ”的请求)。
我应该注意到我正在 Windows 7 64 位上进行开发,所以我一直对由它引起的这种事情感到偏执。我不止一次遇到了问题,结果证明是因为 64 位的古怪。
附加信息:印地 9,德尔福 2007。
希望这足够清楚,可以理解。我不是在寻找具体的答案,因为我提供的还不够;我只是在寻找关于从这里去哪里的建议。非常感激!:)