2012-09-15 68 views
0

我遇到了一些Idhttp.Get方法的問題。我認爲這是默認情況下在阻塞模式下工作(等待答案轉到下一行),但我只是看到它不等待答案轉到另一行。我使用線程,但我認爲這不是問題。該代碼是:IdHTTP.Get不等回答

IdHTTP1:= TIdHttp.Create(Application); 
    IdHTTP1.ConnectTimeout:= 10000; 
    IdHTTP1.Request.Clear; 
    IdHTTP1.Request.BasicAuthentication:= true; 
    IdHTTP1.Request.Username := Username; 
    IdHTTP1.Request.Password := Password; 
    try 
     IdHTTP1.Get(PbxURL); **//this should STOP here and wait for answer don't?** 
     HttpCode:= IdHTTP1.ResponseCode; 
    except 
     on E: EIdHTTPProtocolException do 
     HttpCode := IdHTTP1.ResponseCode; 
    end; 
    if HttpCode=200 then 
     Memo1.Lines.Append('Valid Get!'); 

所以,我剛纔注意到,我沒有得到正確的HttpCode值,因爲「獲取」的方法後,它只是繼續執行,而無需等待「獲得」完整的。我怎麼解決這個問題??

回答

5

你說你沒有得到正確的HttpCode,這表明你得到一個HttpCode,這意味着Get方法已經等待,只要它需要得到一個結果。

如果您獲得的響應代碼是301,那麼您應該嘗試設置HandleRedirects屬性,以便它會使用返回的地址自動重新發出請求。否則,你必須自己處理迴應。

Get函數不會過早返回。你誤解了你所觀察到的。

+0

我同意。 Indy專門使用了阻塞套接字和阻塞操作,因此,直到'Get()'退出,無論是通常還是通過引發的異常,您的代碼都不可能繼續。 –

+0

是的,你是對的。因爲我正在使用線程,所以我在錯誤的地方創建了IdHTTP,並且正在以這種方式工作。只是改變了創建我的IdHTTP對象的地方,它的工作。謝謝。 – HwTrap