2011-04-08 108 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

相關問題