Чтение вывода запроса REST с помощью HttpURLConnection

Чтение вывода запроса REST с помощью HttpURLConnection

29.03.2017 07:14:31 Просмотров 55 Источник

Я пытаюсь сделать запрос REST на API StackExchange на java, и у меня есть некоторые проблемы с чтением вывода. Я сделал небольшой пример кода, чтобы увидеть, если я могу читать правильно:

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. Я хотел бы не использовать какую-либо стороннюю библиотеку, если это возможно.

РЕДАКТИРОВАТЬ Я поставил вывод моей программы в виде изображения.

Non Ascii Chatacters

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/43098884/reading-rest-request-output-using-httpurlconnection#comment73279342_43098884
Может быть, проще использовать фактическую библиотеку HTTP; возможно, это gzipped? Невозможно сказать, так как вы не предоставляете пример выходного значения.
https://stackoverflow.com/questions/43098884/reading-rest-request-output-using-httpurlconnection#comment73279612_43098884
Я отредактировал свой пост, добавив изображение моего вывода.

Ответы - Чтение вывода запроса REST с помощью HttpURLConnection / Reading REST Request Output using HttpURLConnection

Является ответом!
Alekhya

29.03.2017 07:27:07

вы должны использовать API GZIPInputStream, когда содержание кодирования с помощью gzip. это также входной поток.

я использовал поток 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();
    }

    }

это сработало для меня.

https://stackoverflow.com/questions/43098884/reading-rest-request-output-using-httpurlconnection/43099135#comment73279792_43099135
Я не думаю, что это gZip. Вы можете открыть эту ссылку "api.stackexchange.com/2.2/... " в вашем браузере.
https://stackoverflow.com/questions/43098884/reading-rest-request-output-using-httpurlconnection/43099135#comment73279817_43099135
@Павел оказывается браузеров с содержанием ООН-сжатие. Это своего рода то, как веб удается работать. Например, если вы откроете ссылку из вашего вопроса в браузере и посмотрите на сетевой запрос, вы увидите следующее: Content-Encoding: gzip. Так.
Закрыть X