我正在尝试使用以下代码阅读网页内容。但它不会按预期打印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对象
答案 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: