1

我试图弄清楚如何从请求()中读取完整的 URI。Web.HTTPApp.TWebRequest有一个URL属性,但是它返回空,我看不到任何可以给我这个的属性。如何获取请求的完整 URI?这是通过 Indy 10 使用的TIdHTTPWebBrokerBridge

例如...

http://www.mydomain.com:18500/SomePath/SomeFile.html?n=v&a=b

我尝试跟踪此URL属性,发现其中IdHTTPWebBrokerBridge.pas被留空,显然是故意的...

function TIdHTTPAppRequest.GetStringVariable(Index: Integer): AnsiString;
...
  case Index of
    ...
    //INDEX_URL             : Result := AnsiString(FRequestInfo.Document);
    INDEX_URL             : Result := AnsiString(''); // Root - consistent with ISAPI which return path to root 
4

1 回答 1

2

我不知道为什么INDEX_URL返回一个空白字符串。显然,这是故意的。

如果您IdHTTPWebBrokerBridge.pas更仔细地查看代码,您会看到INDEX_URL用于 return FRequestInfo.Document,它与INDEX_PathInfoandINDEX_PathTranslated都返回相同的值。因此,您可以尝试使用 、 、 和 属性的组合TWebRequest.HostTWebRequest.ServerPort重新TWebRequest.Path...创建TWebRequest.Query您正在寻找的 URL(减去协议,您只需对其进行硬编码)。

此外,XE+ 有一个实现返回 Indy 属性值的TWebRequest.RawPathInfo属性,因此您也应该查看它。TIdHTTPAppRequestTIdHTTPRequestInfo.URI

于 2013-07-23T23:01:06.263 回答