2013-03-29 45 views
0

我試圖找出是否存在利用Java的網頁,如果它以代碼200(Page exists)響應。在不生成404頭的網頁上捕獲404類型的異常

我也可以通過獲取響應代碼404找出頁面(不存在)。 我的問題是一些網站不給404,並將重定向或顯示不應該的頁面?存在於下面的示例中。

我不知道這是否僅僅是因爲我對html響應代碼或java不夠了解。

任何幫助將不勝感激,幫助在這些頁面上獲取錯誤代碼而不是200,或捕獲異常。 (對不起,如果我沒有意義)。

public class TestMain { 

public static void main(String[] args) { 

    Test test = new Test(); 
    test.UrlCheck();   
} 
} 

測試類

import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.ProtocolException; 
import java.net.URL; 

public class Test{ 

public void UrlCheck(){ 

    try{  
    URL url = new URL("http://googlewebmastercentral.blogspot.com.au/5000"); 
    HttpURLConnection urncon = (HttpURLConnection)url.openConnection(); 
    urncon.setRequestMethod ("HEAD"); 
    urncon.connect(); 

    int code = urncon.getResponseCode();  
    if(code == 200) 
    System.out.println("Page Found"); 

    }catch(MalformedURLException mue){ 
     mue.printStackTrace(); 
    } catch (ProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
}  
} 

回答

0

我的問題是一些網站不給404和要麼重定向或顯示一個網頁,不應該...

... 200個狀態碼。

沒有通用的解決方案。

如果網站選擇以不存在的頁面響應3xx或200,那麼沒有通用的方法來區分響應頁面和「真實」頁面。的確,響應頁面可能與「真實」頁面無法區分...即使對於人類也是如此。

您希望做的最好的事情是編寫您的應用程序以識別您正在爬行的特定網站(或網站)的行爲;例如通過在響應頁面中查找特徵字符串。

+0

感謝大家的意見,雖然我幾乎從「不能做通用」的每個人都得到相同的答案,但滴答必須去某個地方。 – weekendwarrior84

0

我想你將無法to.do tjis一些網站上 - 他們將有自定義的404處理器,將您重定向到那裏「沒有發現」頁面(良好的做法)。在這種情況下,404 eill永遠不會返回給你,而是有效的頁面。

0

由於有問題的網站顯示該網頁存在,因此您無法對此進行任何操作。如果只是針對某些網站,我建議您在響應主體中搜索與您的條件不符的內容(例如「無帖子」)。去http://googlewebmastercentral.blogspot.com.au/500067890給出了404,所以也許這個示例頁面確實存在?

// lazy and untested example. Can't remember if getContentEncoding gives character encoding 

String charset = urncon.getContentEncoding(); 
if (charset == null) { 
    // Sane default 
    charset = "UTF-8"; 
} 
String data = org.apache.commons.io.IOUtils.toString(urncon.getInputStream(), charset); 
if (!data.contains("foobar")) { 
    throw new IOException("Site not liked"); 
} 

編輯:爲IOUtils和固定方法名添加包名。

+0

該示例在第一次播放時不起作用,雖然它對普通響應有好處,但如果有任何事情發生,互聯網就是叢林:)因此,您可能需要在每個網站的主體中搜索內容。 – weekendwarrior84

0

有沒有傻瓜證明的方式來實現你想要的,取決於網站如何處理404。他們可能只是壓制它,併爲您提供自定義響應。

0

如果它返回了200,那麼這個頁面就存在了,如果這是網站管理員選擇做的事,那麼沒有一種真正的通用方法來捕獲它。

0

大多數情況下,所有網站都會發送404「找不到網頁」錯誤。如果他們正在改變回應,他們不太可能將其設定爲200,因爲200是成功的。

但是,由其他人標記,除非網站所有者通知其他人,否則您不能在您的代碼中識別此內容。