我试图获取我曾经构建的特定网站的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;
}
答案 0 :(得分:2)
我知道我很晚,但我的回答可能会有所帮助。通过设置请求标题我解决了问题
conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
或者它可能只返回json格式的返回响应,你必须写
conn.setRequestProperty("Accept" ,"application/json");
但请注意,如果服务器故意阻止此代码,则此代码将无效。