Android + Java HttpURLConnection + POST request
Я отправляю запрос на некий сервер авторизации. В ответ должен получить ~4Кб данных. В результате вместо этого получаю около 2Кб, после чего поток обрывается, и больше ничего я уже получить не могу. Собственно, код:
Код:
String data = "some string for the request";
URL url = new URL("http://...");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setConnectTimeout(20000);
connection.setReadTimeout(20000);
connection.setFixedLengthStreamingMode(data.length());
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Accept-Encoding", identity");
connection.setDooOutput(true);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
writer.write(data);
writer.flush();
writer.close();
int status = connection.getResponseCode(); // здесь приходит 200
int contentLength = connection.getContentLength(); // сюда приходит ПРАВИЛЬНАЯ цифра!
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String response = "";
char buffer = new char[1024];
int bytesRead = reader.read(buffer, 0, 1024);
while (bytesRead != -1) {
response += new String(buffer, 0, bytesRead);
bytesRead = reader.read(buffer, 0, 1024);
}
reader.close();
URL url = new URL("http://...");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setConnectTimeout(20000);
connection.setReadTimeout(20000);
connection.setFixedLengthStreamingMode(data.length());
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Accept-Encoding", identity");
connection.setDooOutput(true);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
writer.write(data);
writer.flush();
writer.close();
int status = connection.getResponseCode(); // здесь приходит 200
int contentLength = connection.getContentLength(); // сюда приходит ПРАВИЛЬНАЯ цифра!
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String response = "";
char buffer = new char[1024];
int bytesRead = reader.read(buffer, 0, 1024);
while (bytesRead != -1) {
response += new String(buffer, 0, bytesRead);
bytesRead = reader.read(buffer, 0, 1024);
}
reader.close();
- Абсолютно идентичный код на десктопе бегает на ура и загружает все, что положено.
- Отмечу справедливости ради, что ответ с сервера приходит не сразу, а где-то через секунду-полторы (на десктопе). Возможно, это тоже каким-то боком играет роль.
Код:
connection.setRequestProperty("Accept-Encoding", identity");
Это чисто ошибка переноса на форум. :) Сам же понимаешь, что оно бы так не скомпилировалось бы, если бы так и было в коде.
Ребят, вопрос закрыт. Никакой ошибки здесь нет, просто дальше по коду возвращаемая с сервера строка передавалась нативной C++ функции через JNI. Ошибка возникала именно на этом этапе.