无法阅读网页内容

时间:2016-09-11 01:44:55

标签: java url

我正在尝试使用以下代码阅读网页内容。但它不会按预期打印Web内容。在IDE上没有看到错误。而且也不例外。代理也没有设置。任何人都可以指导为什么它可能无法正常工作

import java.net.*;
import java.io.*;

public class URLReader {
    public static void main(String[] args) throws Exception {

        URL oracle = new URL("http://www.oracle.com/");
        BufferedReader in = new BufferedReader(
        new InputStreamReader(oracle.openStream()));

        String inputLine;
        while ((inputLine = in.readLine()) != null)
            System.out.println(inputLine);
        in.close();
    }

在调试循环时,控件不会进入内部。但是在缓冲区读取器obj中,有一个看到的java对象

2 个答案:

答案 0 :(得分:1)

网址http://www.oracle.com/不是HTTPS网址,因此在尝试打印网站内容时,您不会看到任何输出。请尝试使用此网址运行您的程序:https://www.oracle.com/

答案 1 :(得分:0)

接受的答案(以及评论)实际上并没有解释这里发生了什么以及程序没有解释的原因。

首先,在您喜欢的网络浏览器中打开网址http://www.oracle.com/。请注意您实际上如何在URL栏中结束URL https://www.oracle.com/index.html?发生的事情是http://www.oracle.com/的网络服务器已将您的浏览器重定向到新网址。

重定向工作服务器发送某种重定向响应(状态代码3xx)到浏览器发出的GET请求。浏览器读取重定向响应,提取重定向的目标URL,然后将GET请求重新发送到目标URL。 (这可以重复......)

因此,您的示例中发生的事情是您的代码不尊重重定向。相反,它只是将3xx响应视为正常响应。然后你的代码正在读取响应的“正文”,这是空的。

当您手动将URL更改为真实目标(或等效)时,您可以避免重定向....您的代码可以正常工作。如果您希望代码能够处理重定向,则需要以不同方式编写代码。

但是,在这种情况下,仅使用HttpUrlConnection启用“跟随重定向”选项是不够的。 Java HTTP堆栈不​​会将重定向到不同的协议(例如HTTP到HTTPS);见Q& A: