java 的 HTTP 503 错误(不是由于服务器过载)

HTTP 503 error with java (not due to server overload)

我正在尝试使用 java 从使用 Cloudflare Enterprise Package 保护的站点抓取数据。我无法在 Web 上找到有关此 DDOS 保护系统的很多信息,但我认为这是正在发生的事情(通过检查 HTTP 响应和 java 脚本)

  1. 客户端向服务器发送 GET 请求。
  2. 服务器确定 GET 请求和 returns HTTP 503 响应以及一些 HTML.
  3. 中缺少特定的 cookie
  4. 客户端的浏览器自动对该响应运行 java 脚本,解决一个数学问题并发送一个新的 GET 请求,该请求的答案附加为查询字符串。
  5. 服务器以 HTTP 302 重定向响应和必要的 cookie 进行响应。
  6. 浏览器发送带有正确 cookie 的 GET 请求,服务器给出 HTTP 200 响应,一切正常。

我的问题与在 java 中获取初始响应流有关。我创建连接,添加用户代理,然后尝试打开流。正如预期的那样,我收到了 503 响应。但是,java 认为这是一个例外,不会让我访问我认为应该附加到此响应的 HTML。有谁知道如何获得 HTML?或者可能无法将 HTML 附加到 503 而我只是没有正确理解发生了什么?

谢谢!

如果您有除OK之外的其他响应,您需要使用.getErrorStream()读取响应

你可以这样做:

HttpURLConnection c = ....;
InputStream is;
if ((c.getResponseCode()/100)==2) {
    is = c.getInputStream();
} else {
    is = c.getErrorStream(); // instead of normal Input Stream
}

// read your HTML from is