【问题标题】:How can I get the TNMHTTP Get method to respond on a redirect如何让 TNMHTTP Get 方法响应重定向
【发布时间】:2026-02-01 13:00:01
【问题描述】:

我在 Delphi 中使用 TNMHTTP 从网页中检索代码。代码比较简单:

NMHTTP1 := TNMHTTP.Create(Self);
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
NMHTTP1.TimeOut := 3000;

URL := 'http://www....';
NMHTTP1.Get(URL); 
S := NMHTTP1.Body;

我在 try/except 块中捕获异常,但这不是问题。

问题是在 URL 是重定向时执行 NMHTTP1.Get 方法时,该方法不返回并且程序挂起。尽管我已经设置了 3000 秒的超时时间。

所以我看到了解决这个问题的三种可能方法(按照我修改程序的最简单到最难的顺序):

  1. 尽一切可能让 NMHTTP1.Get 方法响应。

  2. 在 NMHTTP1.Get 语句之前进行某种检查以查看 URL 是否为重定向并获取它要重定向到的 URL。

  3. 使用另一种方法通过 Delphi 获取网页。当我写这篇文章时,我使用的是 Delphi 4 并且没有 Indy。我现在有 Delphi 2009,所以如果没有简单的 #1 或 #2 答案,我愿意使用在其中工作的东西(可能是 INDY)。

我很想从对我有用的人那里得到答案。提前致谢。

【问题讨论】:

    标签: delphi


    【解决方案1】:

    我会避免 NetMasters 控制,期间。

    相反,您可以使用 Indy 的 IdHTTP 组件,该组件具有 RedirectMaximum 属性(默认为 15)和 OnRedirect 事件,以防您想要跟踪详细信息。

    【讨论】:

      【解决方案2】:

      我可以建议您切换到 Indy。它们适用于很多网络协议(IRC 协议除外)。包含很好的示例,因此您可以自己检查工作示例。

      还可以查看http://www.indyproject.org/index.en.aspx 了解有关 indy 的更多信息。

      【讨论】: