0

我试图找出是否存在使用 Java 的网页,如果它响应代码 200(页面存在)。

我还可以通过获取响应代码 404 来确定页面是否(不存在)。我的问题是某些网站不提供 404 并且会重定向或显示不应该的页面?存在于下面的示例中。

我不知道这是否只是因为我对 html 响应代码或 java.xml 不够了解。

在帮助在这些页面上获取错误代码而不是 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();
    }
}       
}
4

6 回答 6

0

我认为您将无法在某些站点上执行 tjis - 他们将具有自定义 404 处理程序,页面会将您重定向到“未找到”(良好做法)。在这种情况下,404 eill 永远不会返回给您,而是有效的页面。

于 2013-03-29T04:12:14.760 回答
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 添加包名称和固定方法名称。

于 2013-03-29T04:13:44.157 回答
0

没有万无一失的方法可以实现您想要的,这取决于站点如何处理 404。他们可能会简单地抑制它并为您提供自定义响应。

于 2013-03-29T04:14:32.643 回答
0

如果它返回 200 则该页面存在,如果这是网站管理员选择做的事情,那么实际上并没有一种通用的方法来捕捉它。

于 2013-03-29T04:16:03.277 回答
0

我的问题是一些网站不提供 404 并且会重定向或显示不应该的页面......

...带有 200 状态码。

对此没有通用的解决方案。

如果网站选择以 3xx 或 200 响应不存在的页面,则没有通用方法来区分响应页面和“真实”页面。实际上,响应页面可能与“真实”页面无法区分......即使对于人类也是如此。

您希望做的最好的事情是对您的应用程序进行编码,以识别您正在抓取的特定站点(或多个站点)的行为;例如,通过在响应页面中查找特征字符串。

于 2013-03-29T05:13:04.037 回答
0

大多数情况下,所有网站都会发送 404 以显示“找不到页面”错误。如果他们正在更改响应,则将其设置为 200 的可能性很小,因为 200 表示成功。

但是正如其他人所标记的,除非网站所有者通知其他人,否则您无法在代码中识别这一点。

于 2013-03-29T21:21:05.037 回答