使用Java从响应网页获取文本



我使用http向服务器发送命令,目前需要解析服务器发回的响应(我通过命令行发送命令,服务器响应显示在浏览器中)。

有很多这样的资源:用Java将网页保存到文件中,这些资源清楚地说明了如何抓取cnn.com等页面。然而,由于这是一个只有当相机接收到特定命令时才会生成的响应页面,我尝试使用Mike Deck(在上面的链接中)描述的方法失败了。(具体来说,当我的程序再次请求页面时,服务器会返回401错误。)

服务器的响应在我的浏览器中打开了一个新的选项卡。从本质上讲,我需要知道如何使用java保存当前网页,因为读取文件可能是最简单的方法。你们中有人知道怎么做吗?

TL;DR如何使用java将当前网页保存到webpage.html或webpage.txt文件?

EDIT:我使用了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解决了问题。

所以在仔细检查上面的代码时,我决定更改

connection.setRequestMethod("POST");

connection.setRequestMethod("GET");

这解决了我的问题。事后看来,我认为服务器没有识别HTTP,因为它没有设置为处理post附带的各种陷阱。

最新更新