2011-04-08 133 views
2

我刚开始有Indy问题。出于某种奇怪的原因,连这最基本的步骤不起作用:为什么LoadFromStream在TIdHTTP.Get之后没有显示任何内容?

procedure TForm1.Button1Click(Sender: TObject); 
var ID: TIdHTTP; 
    ms: TMemoryStream; 
begin 
    ID:=TIdHTTP.Create(); 
    ms:=TMemoryStream.Create; 

    ID.HandleRedirects:=true; 

    ID.Get('http://www.google.com',ms); 
    Memo1.Lines.LoadFromStream(ms); 
end; 

没有被添加到Memo1。 SizeOf(ms)返回4.

我甚至重新安装了Indy,仍然没有。我的项目之前肯定有效,但现在不会从任何页面下载任何内容。我想知道,问题是什么?

+0

这不是你的实际代码,因为'TIdHTTP.Create()'甚至不会编译。如果您在使用代码时遇到问题,请发布实际代码,而不是靠近代码。 – 2011-04-08 17:48:39

+0

@ ken我测试这个代码,它的工作!和ms.Position:= 0;解决这个问题。 – Najem 2011-04-08 17:50:37

+0

对不起 - 我的错误。它有一个重写的构造函数,它不接受任何参数,一直返回'TIdInitializerComponent'。很高兴你的问题解决了。 – 2011-04-08 18:02:53

回答

13

尝试调用

MS.Position := 0; 

Memo1.Lines.LoadFromStream(ms); 

也,流的大小可以通过调用 “大小” 属性,像这样

ShowMessage('size of stream = ' + IntToStr(ms.size) + ' bytes'); 
0

奇可以看出,该代码应该工作,假设类似的代码之前工作。

很抱歉,但我问:

  1. 你有没有证实,访问该非常相同的URL从同样的机器在这非常相同的用户帐户的作品在浏览器中?尝试第三方浏览器以及IE浏览器。无法回忆Indy是否使用WinHTTP,但它是可能的,并且影响WinHTTP的问题(例如某些恶意软件或BHO)会影响IE,但不会影响Firefox,Chrome或Opera等。

  2. 您是否尝试关闭防病毒系统和/或防火墙(您是否应使用任何非内置防火墙)?许多防病毒软件包包括Winsock LSP或NDIS拦截器,用于实时网络流量扫描并可能会受到干扰。

  3. 最后,没有了这一切,你能尝试获取使用wgetcURL一个Windows端口非常相同的URL,只是为了看看是否有其他的非浏览器HTTP客户端表现出的问题呢?

+2

代码肯定不起作用 - LoadFromStream从当前位置开始。 – 2011-04-08 18:43:13

+1

问题出在MemoryStream.Position中。我有一个项目已经开始工作,但我只是简单地监督了这部分代码。 – 2011-04-09 13:19:08

相关问题