Java 无法从api调用获取可读数据
我试图调用stack exchange的api来获取stackoverflow用户数据,我可以将其解析为JsonObject,但是我获取的数据是无法读取的垃圾 这是我的密码:Java 无法从api调用获取可读数据,java,rest,http,Java,Rest,Http,我试图调用stack exchange的api来获取stackoverflow用户数据,我可以将其解析为JsonObject,但是我获取的数据是无法读取的垃圾 这是我的密码: String urlName = "https://api.stackexchange.com/2.2/users?site=stackoverflow"; URL url = new URL(urlName); HttpURLConnection conn = (HttpU
String urlName = "https://api.stackexchange.com/2.2/users?site=stackoverflow";
URL url = new URL(urlName);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
InputStream inputStream = conn.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
builder.append(line + "\n");
}
conn.disconnect();
我做错什么了吗?我遵循了示例代码,但我看不出有什么不同问题是从
https://api.stackexchange.com/2.2/users?site=stackoverflow
使用GZip压缩。因此,您看到的不可读垃圾实际上是响应的压缩体。并非响应中的所有内容都将被压缩(某些站点可能选择不压缩),因此您需要检查它们是否被压缩。这可以通过使用
conn.getContentEncoding()
将此应用到代码中可以提供:
String urlName = "https://api.stackexchange.com/2.2/users?site=stackoverflow";
URL url = new URL(urlName);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
InputStream inputStream = conn.getInputStream();
if ("gzip".equals(conn.getContentEncoding())) {
// Is compressed using GZip: Wrap the reader
inputStream = new GZIPInputStream(inputStream);
}
InputStreamReader streamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(streamReader);
StringBuilder builder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
builder.append(line + "\n");
}
conn.disconnect();