POST запрос, возврат данных от сервера (json)

376
25 февраля 2017, 04:27

Проблема заключается в следующем, я отсылаю POST-запросом данные, сервер должен мне возвратить данные в формате json (судя по Fiddler`у), я вроде их получаю, но выводится абракадабра:

String data = "number=123&number2=321"; //данные для отправки
URL myUrl = new URL("https://url");
connection = (HttpURLConnection) myUrl.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
//указываем заголовки (как заполнить Content-Length?) 
connection.setRequestProperty("Referer", "refererurl");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
connection.setRequestProperty("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
connection.setRequestProperty("Host", "host");
connection.setRequestProperty("Connection", "keep-alive");
connection.connect();
//отправляем данные
DataOutputStream wr = new DataOutputStream( connection.getOutputStream());
wr.writeBytes(data);
wr.flush();
wr.close();
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
String line = "";
String res = "";
while ((line = reader.readLine()) != null) {
                res += line;
            }
            reader.close();
            in.close();
            textView.setText(res); //выводим в textview
            connection.disconnect();

Просмотрел заголовки, которые пришли от сервера, совпадают с теми, что показаны в Fiddler кроме Content-Length, почему-то его нету вообще, хотя данные приходят, но прочитать не могу их, в связи с этим вот пара вопросов:

  1. Как задавать заголовок Content-Length при post запросе
  2. Как все же прочитать данные от сервера, которые должны прийти в формате json ( {"status":success, "message":"true"} )

Update: убрал следующие строки

    connection.setRequestProperty("Referer", "refererurl");
    connection.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
    connection.setRequestProperty("Accept-Language", "ru-RU,ru;q=0.8,en-           US;q=0.6,en;q=0.4");
    connection.setRequestProperty("Host", "host");
    connection.setRequestProperty("Connection", "keep-alive");

оставил только Content-Type, и все нормально стало отображаться

  1. Если на сервер необходимо отправить данные в json формате, нужно строкой отправлять также или по другому?

  2. Правильно ли я вообще отправляю post-запрос? мб что-то добавить или вообще убрать, а то я ток 2 дня назад начал работать с этим)

  3. Если я закрываю connection.disconnect(), я могу заново через эту переменную создать новое соединение и указать заголовки?

READ ALSO
Программа не видит таблицы

Программа не видит таблицы

Такая проблемаУ меня на серваке стоит 2 программы, Java + Hibernate

379
Выдает ошибку java.io.IOexception: open failed: EACCES (Permission denied)

Выдает ошибку java.io.IOexception: open failed: EACCES (Permission denied)

Нельзя писать прямо в EnvironmentgetDownloadCacheDirectory() Нужно создать там папку для себя

540
Проблема c кодировкой после сборки приложения

Проблема c кодировкой после сборки приложения

Здравствуйте,сделал приложение,в котором несколько окошек JFrame с русским текстом,после того как упаковал в jar файл и при открытии(без IDE) в Windows7...

333