【问题标题】:Taking text from a response web page using Java使用 Java 从响应网页中获取文本
【发布时间】:2013-08-01 06:24:48
【问题描述】:

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

【问题讨论】:

  • 你试过硒吗?
  • 我没有。在我看来,它更多地用于测试,而我试图简单地保存一个页面。硒有什么用?
  • 是的,它是浏览器测试的事实标准工具。它可以像人类驾驶它一样。您也可以尝试使用 apache 的 curl 或 http-client。
  • 我正在尝试使用来自 apache 的 http-client(推荐了几个地方)。这解决了我的 401 错误,但现在我似乎无法获得与外国 IP 地址通话的连接。 (见我的编辑)

标签: java browser webpage


【解决方案1】:

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

connection.setRequestMethod("POST");

connection.setRequestMethod("GET");

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2010-09-09
    • 2011-09-26
    • 2012-04-07
    • 2021-03-25
    相关资源
    最近更新 更多