【问题标题】:Can't read in HTML content from valid URL无法从有效 URL 读取 HTML 内容
【发布时间】:2012-12-26 04:06:14
【问题描述】:

我正在尝试一个从给定 URL 读取 HTML 内容的简单程序。在这种情况下,我尝试的 URL 不需要任何 cookie/用户名/密码,但我仍然收到 io.IOException: Server returned HTTP response code: 403 错误。谁能告诉我我在这里做错了什么? (我知道SO中有类似的问题,但他们没有帮助):

    import java.net.*;
import java.io.*;
import java.net.MalformedURLException;
import java.io.IOException;
public class urlcont {
public static void main(String[] args) {
try {
  URL u = new URL("http://www.amnesty.org/");
  URLConnection uc = u.openConnection();
  uc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
  uc.connect();
  InputStream in = uc.getInputStream();
  int b;
  File f = new File("C:\\Users\\kausta\\Desktop\\urlcont.txt");
  f.createNewFile();
  OutputStream s = new FileOutputStream(f);
  while ((b = in.read()) != -1) {
    s.write(b);
  }
}
catch (MalformedURLException e) {System.err.println(e);}
catch (IOException e) {System.err.println(e);} 
}
}

【问题讨论】:

  • 为什么是int b 而不是char b?
  • 嗯,不知道。为什么确实如此? Java 快把我逼疯了……
  • 这段代码是从网上拿的吗?
  • 不完全是,Oreilly 的 Java IO。我猜,read 方法将读取的字节返回为无符号字节。
  • 哦.. 抱歉,我没有看到 Stream。然后是对的。 :)

标签: java url io network-programming inputstream


【解决方案1】:

存在权限问题:

Web 服务器可能会返回 403 Forbidden HTTP 状态代码以响应客户端对网页或资源的请求,以指示服务器拒绝允许所请求的操作

【讨论】:

  • 为什么服务器阻止了我?我可以在浏览器中愉快地打开它。我需要发送一些浏览器标头吗?
  • 不,您只是使用了错误的协议,您是直接获取文件,但据我了解,您只需要 html 输出。查找http-request。服务器不想向您显示源代码,但他会给浏览器结果,因为他只请求输出而不是文件本身
【解决方案2】:

您没有做任何“错误”,您尝试访问的服务器正在阻止您的请求,因为您无权访问该文件

Http-Error 403 表示 Forbidden --> 远程服务器阻塞了请求。

检查您是否需要提供身份验证才能访问所需的文档,并在这种情况下提供请求;)

【讨论】:

    【解决方案3】:

    如果您可以在浏览器中获取 URL,但不能通过 Java 获取,那么在我看来,这表明他们正在通过用户代理过滤阻止对页面的编程访问。尝试在您的连接上设置用户代理,以便您的代码在网络服务器上显示为网络浏览器。

    请参阅此主题以获取帮助:What is the proper way of setting headers in a URLConnection?

    【讨论】:

    • 我尝试了代码,它对我有用。我只更改了本地文件路径。我现在在文件中有完整的 html。
    猜你喜欢
    • 2010-11-02
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2017-08-03
    • 2011-09-11
    • 1970-01-01
    • 2017-10-16
    相关资源
    最近更新 更多