代码之家  ›  专栏  ›  技术社区  ›  Noah

Indy 10中的TidHTTP

  •  2
  • Noah  · 技术社区  · 15 年前

    我以前在德尔福用过印第6天,现在我和印第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事件——然而,这种用法对我来说并不明显,而且我在Google上找不到任何有效的例子。我相信这是以前做过的事情,所以任何帮助都会受到感激。

    其他信息: 本着更加具体的精神,我想知道: 1。我这样做是为了开始(还是我错过了什么?). 2.第2条。如果是这样,为什么它可能不起作用。 三。在我使用的编译器/OS/indy的组合中总是可能存在一个bug。(尽管它应该工作)。

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

    最后,下面是一个正在运行的程序的屏幕显示,以清除任何混乱: http://screencast.com/t/NDMzNTQ5 我希望HTML填充第二个备注框。

    5 回复  |  直到 14 年前
        1
  •  2
  •   skamradt    15 年前

    另一个选择是 synapse . 这是使用此库检索网页所需的全部内容:

    uses
      ...,HTTPSEND;
    
    var
      Result : TStrings;
    
    
      if HTTPGetText('http://www.google.com',Result) then
        // do something with result
    

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

        2
  •  4
  •   RRUZ    15 年前

    我想你已经知道了。 HandleRedirects 属性设置为false,如果出现错误“ HTTP/1.1 302 Found “你可以试试这个

    var
    http_result:string;    
    Begin
    IdHTTP1.HandleRedirects:=True;
    http_result := IdHTTP1.Get('http://www.google.com');
    
    End;
    
        3
  •  2
  •   johnny    15 年前

    必须将属性handleredects设置为true。

    不需要表单,使用gexperts组件编写代码,我得到了:

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

    把这个贴在你的单位里,就可以了。

        4
  •  0
  •   Marco van de Voort    15 年前

    iirc如果网站重定向,还需要重写一些处理程序(onredirect等)。但在印第九研究所也是如此。

        5
  •  0
  •   Noah    14 年前

    这个问题一直悬而未决,所以我要把它解决掉。我的解决方案是使用Synapse,正如其中一张海报所建议的那样。它在windows/linux/mac操作系统上运行,修改量最小,在库/线程中运行良好。