我正在使用http向服务器发送命令,我当前需要解析服务器发回的响应(我通过命令行发送命令,服务器响应出现在我的浏览器中)。
有很多资源,例如:Saving a web page to a file in Java,它清楚地说明了如何抓取诸如cnn.com之类的页面。但是,由于这是仅在摄像机收到特定命令时生成的响应页面,因此我尝试使用Mike Deck描述的方法(在上面的链接中)遇到了失败。 (具体来说,当我的程序再次请求页面时,服务器返回401错误。)
服务器的响应在浏览器中打开一个新选项卡。基本上,我需要知道如何使用java保存当前的网页,因为读取文件可能是解决此问题的最简单方法。你们中的任何人都知道怎么做吗?
TL; DR如何使用java将当前网页保存到webpage.html或webpage.txt文件?
编辑:我使用了Apache commons编解码器中的Base64,解决了我的401身份验证问题。但是,当我尝试连接我的InputStream时,我仍然收到400错误(见下文)。这是否意味着首先没有建立连接?
URL url = new URL ("http://"+ipAddress+"/axis-cgi/record/record.cgi?diskid=SD_DISK");
byte[] encodedBytes = Base64.encodeBase64("root:pass".getBytes());
String encoding = new String (encodedBytes);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoInput (true);
connection.setRequestProperty ("Authorization", "Basic " + encoding);
connection.connect();
InputStream content = (InputStream)connection.getInputStream();
BufferedReader in = new BufferedReader (new InputStreamReader (content));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
编辑2:将请求更改为GET解决了问题。
答案 0 :(得分:0)
因此,在仔细检查上面的代码时,我决定改变
connection.setRequestMethod("POST");
到
connection.setRequestMethod("GET");
这解决了我的问题。事后看来,我认为服务器没有识别HTTP,因为它没有设置来处理post附带的各种陷阱。