【问题标题】:HttpURLConnection#getResponseCode() results in FileNotFoundExceptionHttpURLConnection#getResponseCode() 导致 FileNotFoundException
【发布时间】:2018-08-09 09:26:16
【问题描述】:

我目前正在尝试访问位于https://fnbr.co/api/shop 下的 Web API(不是我的)。

我运行的代码基本上是这样的:

URL url = new URL("https://fnbr.co/api/shop");

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.flush();

System.out.println(conn.getResponseCode()); // second error

BufferedReader reader = new BufferedReader(
    new InputStreamReader(conn.getInputStream())); // first error

// read from this reader

控制台输出(响应代码)是

404

FileNotFoundException: https://fnbr.co/api/shop

conn.getInputStream() 和另一个在同一行

FileNotFoundException: https://fnbr.co/api/shop

conn.getResponseCode()一致

我的问题在哪里(因为 404 应该意味着文件不存在,但我可以通过浏览器访问它)?

【问题讨论】:

  • 你的浏览器使用代理吗?
  • @jhamon 没有,但我的浏览器没有问题,但 java 代码有问题
  • 我明白了,我的问题的隐含部分是:也许你没有在代码中设置代理。
  • 此 java 代码是否从您使用浏览器访问时获得响应的同一系统执行?
  • @Samy 是的,我使用相同的系统

标签: java http url


【解决方案1】:

HTTP 404 表示请求的 URL 不存在。这意味着在您的情况下,GET https://fnbr.co/api/shop 地址后面没有任何内容。也许您需要使用不同的协议,例如 PUT、POST 等:

404 Not Found 无法找到请求的资源,但可能是 将来可用。客户端的后续请求是 允许的。

Here是HTTP响应码的官方描述。

您需要处理客户端代码中的错误,例如 HTTP 404,以便在返回 HTTP 200 时读取响应(请记住,它不是文件,而是请求-响应!),如下所示:

if (conn.getResponseCode() == 200) {
    BufferedReader reader = new BufferedReader(
        new InputStreamReader(conn.getInputStream()));
}

【讨论】:

  • 我必须使用 GET,因为 API 中有这样的规定
  • 检查您的网址是否正确。这很容易,因为它是一个 GET 请求。尝试在您的网络浏览器中打开fnbr.co/api/shop
  • 我可以在网络浏览器中成功打开网址——它甚至给出了我想要的结果。但它 java 给了我 same url 的 404 错误
  • @writzlpfrimpft 处理响应代码已解决 404 资源不可用?请澄清。
  • @Samy 我收到 404 错误代码,即使资源可用(我可以通过我的网络浏览器访问它)
【解决方案2】:
conn.setDoOutput(true);

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.flush();

对于 GET 请求,这看起来是虚假的。

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多