【发布时间】:2011-01-04 23:36:03
【问题描述】:
我正在构建一个 Java 应用程序,它将从网站下载 HTML 页面并将文件保存在我的本地系统中。我可以通过浏览器手动访问网页的 URL。但是当我尝试在我的 Java 程序中访问相同的 URL 时,服务器返回 503 错误。这是场景:
能够通过浏览器访问上述网址。但是下面的Java代码无法下载页面:
StringBuffer data = new StringBuffer();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(sourceUrl.openStream()));
String inputLine = "";
while ((inputLine = br.readLine()) != null) {
data.append(inputLine);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
br.close();
}
所以,我的问题是:
我在这里做错了吗?
服务器有没有办法阻止来自程序/机器人的请求,只允许来自浏览器的请求?
【问题讨论】:
-
就问题 #2 而言,服务器可以配置为根据
User-Agent标头或缺少的Referer标头拒绝。 -
@ZoogieZork:如果这就是它正在做的事情,那就是行为不端。 5xx 错误用于解决内部服务器问题。机器人拒绝应该返回 4xx 错误。
-
我能想到的可能原因有很多(我个人认为不是“错误”的用户代理引起的,它宁愿返回一个4xx错误)。如果您敢于发布有问题的实际网址,那么我们可能会提供更好的答案。
-
您好朋友,感谢您的所有回复。我发现了上述错误的问题所在。我从代理后面的办公系统运行上述代码。因此,显然代码无法获取数据,因为我没有在我的 Java 代码中设置代理。但是当我在我的家庭系统中运行相同的代码时,它运行时没有出现故障,因为我的家庭系统没有任何代理。
标签: java url jakarta-ee