Java URL - 服务器响应416错误代码

时间:2015-11-24 14:47:59

标签: java url server

我试图获取我曾经构建的特定网站的html源代码。但是我继续得到这个错误:

java.io.IOException: Server returned HTTP response code: 416 for URL: http://www.website.com/
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1838)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
    at main.getHTMLContent(main.java:37)
    at main.getEventLinks(main.java:69)
    at main.main(main.java:21)
Exception in thread "main" java.lang.NullPointerException
    at main.getEventLinks(main.java:72)
    at main.main(main.java:21)

我做了一些研究,但找不到可能的解决方案。

我知道416是:

Web服务器(运行Web站点)认为客户端(例如您的Web浏览器或我们的CheckUpDown机器人)发送的HTTP数据流包含一个' Range'请求,指定无法满足的字节范围 - 因为正在访问的资源不包括此字节范围。例如,如果资源(例如图像文件)具有1000个字节且请求的范围是500-1500,则无法满足。

通过http://www.checkupdown.com/status/E416.html

我找到了这个解决方案,但我无法访问服务器。

416 Requested Range Not Satisfiable

如果您知道解决此问题的方法,那将会有所帮助。我也对可能的替代方案持开放态度。

以下是发出请求的代码:

protected  static ArrayList<String> getHTMLContent(String u){
    URL url;
    ArrayList<String> linesOfHTML = new ArrayList<>();
    try {
        // get URL content

        //String a="http://localhost:8080//TestWeb/index.jsp";
        url = new URL(u);
        URLConnection conn = url.openConnection();

        // open the stream and put it into BufferedReader
        BufferedReader br = new BufferedReader(
                           new InputStreamReader(conn.getInputStream()));

        String inputLine;
        while ((inputLine = br.readLine()) != null) {
                System.out.println(inputLine);
                if(!inputLine.equals("")){
                    linesOfHTML.add(inputLine);
                }
        }
        br.close();

        System.out.println("Done");
        return null;

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

1 个答案:

答案 0 :(得分:2)

我知道我很晚,但我的回答可能会有所帮助。通过设置请求标题我解决了问题

conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 

或者它可能只返回json格式的返回响应,你必须写

conn.setRequestProperty("Accept" ,"application/json"); 

但请注意,如果服务器故意阻止此代码,则此代码将无效。