【问题标题】:Jsoup 404 errorJsoup 404错误
【发布时间】:2014-08-19 23:31:09
【问题描述】:

我是 Jsoup 的新手,但我不明白为什么在尝试获取页面时收到 404 错误,即使该页面可以从浏览器访问并且我不使用任何代理。我已尝试使用以下代码:

private static Document connect() {
    String url = "http://www.transfermarkt.co.uk/real-madrid/startseite/verein/418";
    Document doc = null;
    try {
        doc = Jsoup.connect(url).get();
    } catch (NullPointerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (HttpStatusException e) {
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return doc;
}

我收到异常消息:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=404, URL=http://www.transfermarkt.co.uk/real-madrid/startseite/verein/418
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:449)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167)
at ro.pago.ucl2015.UCLWebParser.connect(UCLWebParser.java:27)
at ro.pago.ucl2015.UCLWebParser.main(UCLWebParser.java:16)

【问题讨论】:

    标签: java html connection http-status-code-404 jsoup


    【解决方案1】:

    该网站似乎不允许机器人,它会抛出一个 404 错误响应,以防它找不到 User-Agent 标头。 以下内容在设置用户代理标头时起作用

    private static Document connect() {
        String url = "http://www.transfermarkt.co.uk/real-madrid/startseite/verein/418";
        Document doc = null;
        try {
            doc = Jsoup.connect(url)
                   .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
                   .referrer("http://www.google.com")              
                   .get();
        } catch (NullPointerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (HttpStatusException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return doc;
    }
    

    用户代理

    超文本传输​​协议 (HTTP) 识别客户端软件 使用“User-Agent”标头发起请求,即使当 客户端不是由用户操作的。


    Referrer(我认为没有必要)

    HTTP referer(最初是 referrer 的拼写错误)是一个 HTTP 标头 标识网页地址的字段(即 URI 或 IRI) 链接到所请求的资源。

    只是为了提供全方位服务,我建议您为您的请求设置超时期限。默认值为 3 秒,如果服务器花费的时间超过您将收到的时间 一个例外。 Bellow 使用超时设置器跟随您的代码。在尽可能长的时间段内将其设置为零。

    private static Document connect() {
        String url = "http://www.transfermarkt.co.uk/real-madrid/startseite/verein/418";
        Document doc = null;
        try {
            doc = Jsoup.connect(url)
                   .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
                   .referrer("http://www.google.com") 
                   .timeout(1000*5) //it's in milliseconds, so this means 5 seconds.              
                   .get();
        } catch (NullPointerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (HttpStatusException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return doc;
    } 
    

    【讨论】:

    • 谢谢!!有效。对不起,我不能投票给你答案,你应得的。你能解释一下 userAgent 和 referrer 方法是什么吗?他们的作用是什么?再次感谢
    • 没问题。你采取了额外的步骤来感谢我的评论,这一事实绰绰有余。我很高兴能帮上忙。附言检查我的更新。
    【解决方案2】:

    如果您收到响应代码 404 ,则可以跳过该网址

    使用ignoreHttpErrors(true),一定能解决你的问题

    Document doc3 = null;
        try {
            doc3 = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
                    .referrer("http://www.google.com").ignoreHttpErrors(true).get();
    
        } catch (NullPointerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    

    【讨论】:

    • @user25 为什么要加载一个抛出 404 的 url - 实际上不存在。
    • 它存在,我只需要先在主页登录,然后再尝试加载同一站点的另一个页面,某些功能只有在您登录时才有效
    • 那么我相信你需要检查一些方法来传递额外的凭据以及 url
    • 是的,我已经解决了,知道了如何登录,然后我可以使用 cookie 加载不同的页面
    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    相关资源
    最近更新 更多