Зашифрованный контент из BufferReader

У меня такая ситуация: есть веб-сервис отдыха на Джерси, работающий по HTTPS. Я работаю над кодом Android, который будет отправлять Json в эту службу и читать ответ. Мне удалось подключиться, из журнала API я вижу, что вызов был получен и никаких ошибок не отображается, я также получаю данные в "InputStream" соединения, но данные зашифрованы! Даже когда я пытаюсь использовать обычное HTTP-соединение и запускаю веб-службу в режиме HTTP, результат тот же.

Что меня смущает, так это то, что равный запрос cURL дает правильный вывод без каких-либо проблем ... Где я ошибаюсь? Это код, который я использую:

        URL url = new URL("https://myServer:8780/api/<apicall>");
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

        // Create the SSL connection
        SSLContext sc;
        sc = SSLContext.getInstance("TLS");
        sc.init(null, null, new java.security.SecureRandom());
        conn.setSSLSocketFactory(sc.getSocketFactory());

        // set Timeout and method
        conn.setReadTimeout(7000);
        conn.setConnectTimeout(7000);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setRequestProperty("Accept-Encoding", "gzip");
        conn.setRequestProperty("Accept", "application/json");

        // Add any data you wish to post here
        String json = "{\"test\":\"hello\"}";


        byte[] bytes = json.getBytes("UTF-8");
        OutputStream out = conn.getOutputStream();
        out.write(bytes);
        out.flush();
        out.close();

        String result = new String();
        InputStream is = null;
        /*if ("gzip".equals(conn.getContentEncoding()))
            is = new GZIPInputStream(conn.getInputStream()); THIS WOULD FAIL WITH ERROR MESSAGE THAT CONTENT IS NOT IN GZIP FORMAT!
        else*/
            is = conn.getInputStream();

        BufferedReader in = new BufferedReader(new InputStreamReader(is));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            result += inputLine;
        }

В то же время этот вызов cURL (я использую Linux) работает отлично и возвращает ожидаемый ответ JSON с сервера:

curl -H 'Accept-Encoding: gzip' -X POST https://myServer:8780/api/<apicall> -d '{"test":"hello"}'

РЕДАКТИРОВАТЬ Проблема была вызвана тем, что мой сервер использовал как "Content-encoding: gzip", так и "Transfer-encoding: gzip". Когда я удалил «Transfer-Encoding», проблема была решена!

Так что он никогда не был зашифрован, он был сжат GZIP, может быть, дважды.

user207421 17.02.2019 22:34

Да, судя по всему, он дважды был заархивирован. Я был сбит с толку, когда пытался использовать GzipInputStream, я получил сообщение об ошибке, что содержимое не в формате GZip...

guest86 17.02.2019 23:25
0
2
27
0

Другие вопросы по теме