从我的 Java 程序访问 URL 时出现 HTTP 503 错误 [重复]

Posted

技术标签:

【中文标题】从我的 Java 程序访问 URL 时出现 HTTP 503 错误 [重复]【英文标题】:Getting HTTP 503 error while accessing a URL from my Java program [duplicate] 【发布时间】:2011-01-04 23:36:03 【问题描述】:

我正在构建一个 Java 应用程序,它将从网站下载 html 页面并将文件保存在我的本地系统中。我可以通过浏览器手动访问网页的 URL。但是当我尝试在我的 Java 程序中访问相同的 URL 时,服务器返回 503 错误。这是场景:

示例网址 = http://content.somesite.com/demo/somepage.asp

能够通过浏览器访问上述网址。但是下面的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 代码中设置代理。但是当我在我的家庭系统中运行相同的代码时,它运行时没有出现故障,因为我的家庭系统没有任何代理。 【参考方案1】:

您可能想尝试将User-AgentReferer HTTP 标头设置为类似于普通网络浏览器发送的内容。

您可以从此列表中选择一个用户代理字符串:Seehowitruns: User-agent strings。

此外,如果您请求的页面是内部页面,它也可能依赖于在前一页面中生成的 cookie。

【讨论】:

然而,在这种情况下,他们可能不希望机器人访问他们的网站。如果您的程序不仅仅用于私人用途,您可能需要查看他们的服务条款。

以上是关于从我的 Java 程序访问 URL 时出现 HTTP 503 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java Jersey Rest:未找到提供程序类。 (访问 URL 时出现 404 错误)

尝试从 Web 应用程序获取数据时出现 Cors 错误(没有“访问控制允许来源”/它没有 HTTP ok 状态。)

尝试从 Docker 访问 ES 实例时出现 SSLHandshakeException

使用 Java spring cloud aws 确认 SNS 通知时出现 InvalidParameterException

当用户从我的应用程序中单击 Facebook 邀请时出现“找不到页面”

从我的数组列表中播放随机歌曲时出现异常