我目前正在尝试访问位于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应该表示该文件不存在,但是我可以通过浏览器访问它)?
答案 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请求,这看起来很虚伪。