我正在編寫一個程序在網站上執行檢查以測試它們是當前狀態,例如, 200 OK。我使用Delphi 2010附帶的Indy HTTP來執行此任務並獲得當前代碼。TidHTTP錯誤處理
procedure TCheckSiteIndividual.Execute;
var
http : TIdhttp;
begin
try
try
http := Tidhttp.create(nil); //Create indy
http.Get(CSiteURL,nil); //Send Request To Check Site
except
on E: EIdHTTPProtocolException do
status := http.ResponseText; // or: code := E.ErrorCode;
end;
status := http.ResponseText; //Return Status of Site
synchronize(updateform); //Update data to form
finally
http.Free;
end;
end;
的CSiteURL
變量被設置在螺紋構造,並且status
變量是整個主題的變量。
的嘗試,除了這部分代碼來自人頭馬勒博 - TeamB here這是我提出的問題時,最初這個想法擺弄周圍。我遇到的問題是,該代碼只適用於網站返回200 OK代碼的情況。任何其他事情都會導致異常,包括如果我禁用互聯網。這也會導致例如重定向的網站例外。 www.google.com會在調試過程中導致異常,我認爲會導致它重定向到www.google.co.uk,但是如果我繼續超出異常,那麼它將返回301 FOUND代碼而不會出現任何問題。
我正在尋找它的最終結果,以便根據網站是否在線或有錯誤(例如,HTML RETURN CODE)給我返回當網站不存在時額外提供反饋(例如非註冊的網址)或只是無法聯繫。
我正在尋找的其他建議的忠告是如何從請求中獲得更多信息。具體來說,我現在正在尋找也檢查過的網站的IP。
如果不需要在任何URL之前加上http://,它也可以很好地工作,所以例如www.google.com將會工作,而目前它並不是因爲未知的協議。
基本上這將是巨大的,如果有人有一個鏈接,爲IndyHTTP一些不錯的文檔,因爲它似乎是稀疏,
它看起來像你的狀態分配後,異常處理程序是錯位的......你也忽略@Remy建議使用頭部方法,而不是整個只是瞭解服務器返回的狀態。另外,你正在使用ResponseText來檢查站點的* status *,注意INDY爲你解析這個,並給你很好的ResponseCode整型屬性來檢查響應。最後,你說異常被提出,但你不會告訴我們哪個異常,所以通過閱讀代碼很難弄清楚發生了什麼。 – jachguate 2011-03-14 17:02:04
@jachguate我現在已經更新了代碼以反映.head方法。我已經改變了它,正在下載網站的頁面,但已經擱置,剛纔。異常處理程序以何種方式錯位?另外,如果我更改爲使用ResponseCode方法,則發生套接字錯誤時會發生什麼情況,例如站點無法到達。例外beign的問題隨着它們的劇烈變化而產生,其中一些是套接字錯誤,一些例外,例如返回。 HTTP/1的例外。1 302找到 – jskrwyk 2011-03-17 02:08:53
異常處理程序沒有放錯地方,你在異常處理程序後執行的狀態分配對我來說是沒有意義的。關於這裏提出的各種例外......它不是太大......你可以通過檢查得到更多有關各種失敗原因的知識,而且你可以微調你的軟件來相應地管理和報告,知識。 – jachguate 2011-03-18 17:15:32