Java 使用HttpURLConnection读取REST请求输出

Java 使用HttpURLConnection读取REST请求输出,java,json,rest,httpresponse,stackexchange,Java,Json,Rest,Httpresponse,Stackexchange,我试图在java上的StackExchangeAPI上执行REST请求,但在读取输出时遇到了一些问题。我制作了一个小代码示例,以查看我是否能够正确阅读: package Utils; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class RestClient { public

我试图在java上的StackExchangeAPI上执行REST请求,但在读取输出时遇到了一些问题。我制作了一个小代码示例,以查看我是否能够正确阅读:

package Utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class RestClient
{


public static void main(String[] args)
{
    try
    {
        URL url = new URL("https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        System.out.println(conn.getResponseCode());

        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String output;

        while ((output = reader.readLine()) != null)
        {
            System.out.println(output);
        }

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

}
以下是网站的输出示例:

{"items":[{"tags":["c++","templates","covariant"],"owner":{"reputation":3,"user_id":7447292,"user_type":"registered","profile_image":"https://www.gravatar.com/avatar/8979f1b328b9b0f786dec8b4edd514bc?s=128&d=identicon&r=PG&f=1","display_name":"B.Oudot","link":"http://stackoverflow.com/users/7447292/b-oudot"}
然而,当我打印java程序的输出时,我得到状态码200,然后剩下的只是一堆非ascii字符。我对REST和JSON是新手。如果可能,我不想使用任何第三方库

编辑 我已将程序的输出作为图像


当内容编码使用gZip时,您需要使用GZIPInputStream api。它也是一个输入流

我使用gipinput流作为您的响应,我看到了json的输出

public static void main(String[] args){
    try
    {
        URL url = new URL("https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        System.out.println(conn.getResponseCode());



        GZIPInputStream gzis = new GZIPInputStream(conn.getInputStream());
        InputStreamReader reader = new InputStreamReader(gzis);
        BufferedReader in = new BufferedReader(reader);

        String readed;
        while ((readed = in.readLine()) != null) {
            System.out.println(readed);
        }
        //BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String output;

        while ((output = in.readLine()) != null)
        {
            System.out.println(output);
        }

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    }

它对我很有用。

使用实际的HTTP库可能更容易;也许是gzipped?由于您没有提供输出值的示例,所以不可能这么说。我通过添加输出的图片编辑了我的帖子。我不认为这是gZip。您可以在浏览器中打开此链接“”。@事实证明,浏览器可以处理取消压缩内容。这就是网络如何运作的方式。例如,如果您在浏览器中打开问题的链接并查看网络请求,您将看到以下内容:
内容编码:gzip
。所以