HttpURLConnection#getResponseCode()导致FileNotFoundException

时间:2018-08-09 09:26:16

标签: java http url

我目前正在尝试访问位于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应该表示该文件不存在,但是我可以通过浏览器访问它)?

2 个答案:

答案 0 :(得分:1)

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

  

404找不到找不到请求的资源,但可能是   将来可用。客户的后续请求是   允许的。

Here是HTTP响应代码的正式描述。

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

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

答案 1 :(得分:0)

conn.setDoOutput(true);

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

对于GET请求,这看起来很虚伪。