1

我面临一个奇怪的问题,其中有效 URL 上的Get()方法TIdHTTP返回一个空白字符串,但仅在特定机器上。此外,在这些相同的机器上,如果我在 Google Chrome 中导航到相同的 URL,它将返回预期值。

不会发生异常,只返回一个空字符串。尝试了 URL 的 HTTPS 和 HTTP 版本,同样的问题发生了。还尝试使用CookieManagerand 设置HandleRedirects为 true,没有运气。

有问题的机器是 Windows 2012 服务器,我的应用程序在其防火墙上被列入白名单。

有什么我可以尝试诊断/解决这个问题的吗?我迷路了 !

4

1 回答 1

3

不幸的是,没有提供足够的信息来诊断正在发生的事情。由于没有引发异常,因此只有两种可能性。任何一个:

  • 服务器确实在发送空白正文数据,例如,如果您使用 Indy 的默认值UserAgent并且服务器不喜欢/识别它。一些服务器是 UserAgent 感知的,将为不同的代理提供不同的数据。尝试将TIdHTTP.Request.UserAgent属性设置为模拟真实的 Web 浏览器,看看结果是否改变。

  • 服务器正在发送正文数据,但在转换为 a 时数据会丢失String,例如由于无效的字符集转换。 TIdHTTP.Get()具有填充 aTStream而不是返回 a的重载String,您可以使用它来排除字符集处理的任何问题。

我建议您查看原始 HTTP 流量,以确保请求和响应符合您的预期。要捕获原始数据,您可以使用数据包嗅探器,例如 Wireshark。或者将 IndyTIdConnectionIntercept派生的组件之一(如TIdLog...)分配给该TIdHTTP.Intercept属性。

于 2020-12-01T00:35:10.993 回答