У меня такая ситуация: есть веб-сервис отдыха Джерси, работающий по протоколу 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"}'
EDIT Проблема была вызвана тем, что мой сервер использовал «Content-encoding: gzip» и «Transfer-encoding: gzip».Когда я удалил «Transfer-Encoding», проблема была решена!