Delphi 印度第十大城市

Delphi 印度第十大城市,delphi,indy,freepascal,Delphi,Indy,Freepascal,我曾经在德尔福6天内使用Indy,现在我正在使用Indy 10。我想做的是难以置信的简单,但我看不到简单的方法,所以我一定错过了什么 我想做的是这样的: 以下是我正在使用的实际代码: procedure TForm1.btnGetURLClick(Sender: TObject); begin moHeader.Lines.Clear; moBody.Lines.Clear; try moBody.text := IdHttp1.Get(edURL.text); fina

我曾经在德尔福6天内使用Indy,现在我正在使用Indy 10。我想做的是难以置信的简单,但我看不到简单的方法,所以我一定错过了什么

我想做的是这样的:

以下是我正在使用的实际代码:

procedure TForm1.btnGetURLClick(Sender: TObject);
begin
  moHeader.Lines.Clear;
  moBody.Lines.Clear;
  try
    moBody.text := IdHttp1.Get(edURL.text);
  finally
  end;
end;   
请求完成后,http_结果应包含指定URL中的HTML。然而,这似乎不起作用,所以我觉得我可能应该使用IOHandler属性或组件的OnWork事件——然而,对我来说,用法似乎并不明显,我也找不到任何谷歌的工作示例。我相信这是以前做过的事情,所以任何帮助都将不胜感激

其他信息: 本着更加具体的精神,我想知道: 1.我一开始做得对吗(或者我错过了什么?)。 2.如果是这样,为什么它可能不起作用呢。 3.我正在使用的编译器/os/Indy组合中总是可能存在错误。(尽管它应该能工作)

我应该提到,我总是会弹出一个“连接优雅地关闭”。这似乎是一个例外,它可能会干扰函数的结果。我试图用一个尝试来捕捉这个…最后,但它不起作用。可能是因为Indy在Get方法运行后在后台触发了异常

最后,这里是程序运行的屏幕广播,以消除任何混淆:
我希望HTML填充第二个备忘框。

Iirc如果网站重定向,您还需要覆盖一些处理程序(onredirect或其他)。但在indy9 iirc中也是如此。

必须将属性HandleRedirects设置为true

不需要表单,使用GExperts组件编写代码我得到了以下结果:

var
  IdHTTP: TIdHTTP;

IdHTTP := TIdHTTP.Create(Self);
with IdHTTP do
begin
  Name := 'IdHTTP';
  AllowCookies := True;
  HandleRedirects := True;
  HTTPOptions := [hoForceEncodeParams];
end;

只需将其粘贴到您的单元中,就可以了。

我认为您的TIdHTTP属性设置为false,如果出现错误“”,您可以尝试此操作

var
http_result:string;    
Begin
IdHTTP1.HandleRedirects:=True;
http_result := IdHTTP1.Get('http://www.google.com');

End;

另一个选择是使用。以下是使用此库检索网页所需的全部内容:

uses
  ...,HTTPSEND;

var
  Result : TStrings;


  if HTTPGetText('http://www.google.com',Result) then
    // do something with result

Synapse是一个轻量级的TCPIP库。该库正在积极维护,当前版本在Delphi 2009/2010中运行良好。它不是一个基于组件的框架,因此它很容易与其他线程技术(例如)一起使用。

这个问题已经存在了很长一段时间,所以我将结束它。我的解决方案是使用Synapse,正如其中一张海报所建议的那样。它可以在windows/Linux/Mac操作系统上运行,只需很少的修改,在库/线程中运行良好。

这应该可以。也许您可以显示创建
IdHTTP1
的部分。我想如果您没有使用表单,您可以在代码中手动执行。欢迎使用堆栈溢出。在这里,就像生活中的其他地方一样,当你说有些东西不起作用时,你需要更具体一些。发生了什么,你期望会发生什么?实际上,我现在正在一个表单上进行测试,我提到在没有GUI组件的情况下进行测试,因为我计划最终在库中使用它。现在,当然,我的重点是让它工作。嗨,这真的发生了。我现在将HandleRedirects属性设置为true。不过,我仍然找到了:HTTP/1.1 302。302是一个重定向。TIdHTTP处理得很好,只要服务器提供一个带有新URL的“Location”头。我计划在本地守护进程中使用它,因此重定向不会成为问题,但可能是因为它们目前是问题,因为我一直在使用www.google.com等进行测试。另一方面,到目前为止,我无法让任何网站正常工作,这让我相信我一定是用了错误的方法。默认情况下,TIDWTTP会自动处理重定向。看看HandlerRedirects和RedirectMaximum属性。我一定会看一看。我选择Indy是因为我几年前在Delphi 6中使用过它,所以我对它很熟悉。我让Synapse做了一些工作(支持开箱即用的FPK,但不支持MacOS/BSD…)。我认为这是一个很好的选择,但我会把问题留得更久一些,因为通过修复Indy来回答这个问题可能会帮助其他人以后寻找这样的答案。