如何获取TNMHTTP Get方法来响应重定向

时间:2008-11-02 17:53:05

标签: delphi

我在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)。

  4. 我很乐意从能为我工作的人那里得到答案。提前谢谢。

2 个答案:

答案 0 :(得分:3)

我建议你切换到Indy。它们适用于许多网络协议(IRC协议除外)。有很好的例子,所以你可以自己检查一下工作实例。

另请查看http://www.indyproject.org/index.en.aspx以获取有关indy的更多信息。

答案 1 :(得分:3)

我会避免使用NetMasters控件。

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