Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 5
1

Отправка POST-запроса на сервер

25.10.2017, 23:18. Показов 1841. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача - отправить на сервер запрос (либо параметры для запроса на сервере) и получить выборку. Однако с отправкой возникли проблемы.

В RegConnection передаю через execute два параметра: param[0] это текст из EditText (условие запроса) и param[1] это номер выбранного элемента спиннера. Однако при передаче данных через urlConnection.setRequestProperty (вообще не понимаю нужен ли в этой ситуации буфер выходных данных и как без него, однако для получения значения обратно нужен входной) запрос происходит через раз, и то, даже если он приходит (и создается тхт-лог), то POST-параметры пустые.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class RegConnection extends AsyncTask<String,Void,Void> {
 
    HttpURLConnection urlConnection = null;
    @Override
    protected Void doInBackground(String... params) {
        try {
            URL url = new URL("https://r-rp.su/php/android.php");
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("POST");
            urlConnection.setRequestProperty("spinneritem", params[1]);
            urlConnection.setRequestProperty("value", params[0]);
            urlConnection.setDoOutput(true);
            OutputStream os = urlConnection.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
            writer.write("Hello");
            writer.flush();
            writer.close();
            os.close();
            urlConnection.connect();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
}
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
 
$spinneritem = intval($_POST['spinneritem']);
$value = $_POST['value'];
$query = "";
file_put_contents('android.txt', $spinneritem." - item ".$value." - value\n", LOCK_EX | FILE_APPEND);
 
switch($spinneritem)
{
    case 0:
        $query = "SELECT FLIGHTS.NUM, FLIGHTS.START_TIME, FLIGHTS.AIRPORT_TARGET FROM FLIGHTS
                            INNER JOIN startings ON startings.flight_num=flights.num
                            INNER JOIN PLANES ON startings.plane_code=PLANES.PLANE_CODE +
                            WHERE PLANES.TYPE=?;";
                            
        break;
}
 
try {
    $dbh = new PDO('*данные*);
    
    $stmt = $dbh->prepare($query);
    $stmt->execute($value);
    $res = $stmt->fetchAll(PDO::FETCH_BOTH);
    $ret = json_encode($res);
    file_put_contents('android.txt', $ret." - returned value \n", LOCK_EX | FILE_APPEND);
    echo $res;
    
    
    $dbh = null;
} catch (PDOException $e) {
    echo "Error!: " . $e->getMessage() . "<br/>";
    file_put_contents('android.txt', $e->getMessage()." - exception \n", LOCK_EX | FILE_APPEND);
    die();
}
 
?>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2017, 23:18
Ответы с готовыми решениями:

Отправка post запроса на сервер (okhttp)
Доброго времени суток. Столкнулся с проблемой отправки post запроса на сервер. Рекомендуют...

Отправка POST запроса
Здраствуйте, нужно на сайт отправить пост запрос з логином і паролем, потом сайт оддаст строку, ее...

Отправка POST запроса
Добрый день! столкнулся с проблемой, не могу отправить пост запрос, сваливаюсь на OutputStream...

Отправка POST запроса
Здравствуйте! Решил попробовать написать приложение на Android. Задачу поставил такую, что надо...

6
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
26.10.2017, 15:46 2
Вы свои параметры кладете в хидеры, на не в body
Вот ответ на каш вопрос
https://stackoverflow.com/a/13486223/7157419
1
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 5
26.10.2017, 15:52  [ТС] 3
Дело в том, что я исправил эту ситуацию, но у меня складывается ощущение, что информация теряется где-то. Я подправил php под новый java-код. Должно ли это работать? Передача JSON.Object.toString() (придумал не сам, видел рабочий вариант). Никакой реакции от принимающего сервера, 0 ошибок в приложении.По идее одно и то же что и list только в немного другом формате.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
private class RegConnection extends AsyncTask<String, Void, String> {
 
        HttpsURLConnection urlConnection = null;
 
        @Override
        protected String doInBackground(String... params) {
            try {
                URL url = new URL("https://r-rp.su/php/android.php");
                urlConnection = (HttpsURLConnection) url.openConnection();
 
                urlConnection.setRequestMethod("POST");
                //urlConnection.setRequestProperty("Content-Type", "application/json");
                urlConnection.setUseCaches(false);
                //urlConnection.setRequestProperty("spinneritem", params[1]);
                //urlConnection.setRequestProperty("value", params[0]);
                urlConnection.setDoOutput(true);
                JSONObject data = new JSONObject();
                data.put("spinneritem", params[1]);
                data.put("value", params[0]);
                // byte[] data = ("spinneritem="+params[1]+"&value="+params[0]).getBytes();
                OutputStream os = urlConnection.getOutputStream();
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
                bw.write(data.toString());
                bw.flush();
                bw.close();
                os.close();
                urlConnection.connect();
 
                //urlConnection.disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
 
 
    }
0
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
26.10.2017, 16:00 4
Цитата Сообщение от FoGezz Посмотреть сообщение
$spinneritem = intval($_POST['spinneritem']);
$value = $_POST['value'];
Вы тут вытягиваете поля POST. А то, что вы только что записали, это вы создали raw data, куда записали json. Это совершенно другое.
1
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 5
26.10.2017, 16:05  [ТС] 5
Я уже изменил свой php файл. Я понял про сырые данные и реализовал их получение с помощью
$input_json = json_decode(file_get_contents("php://input", TRUE)). Суть в том, что до сервера сейчас вообще не доходят запросы, будто их и нет вообще. Пробовал 2 хостинга: бегет и хостингер с https и http соответственно.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
26.10.2017, 16:13 6
разрешение на INTENET в манифесте вообще есть?
0
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 5
26.10.2017, 16:15  [ТС] 7
Да, есть конечно. К сожалению отошёл из дома и не могу дать полный листинг.
Также есть на network state и в коде метод проверяющий вообще наличие подключения к сети
0
26.10.2017, 16:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2017, 16:15
Помогаю со студенческими работами здесь

Не работает отправка POST запроса
try{ HttpClient httpclient = new DefaultHttpClient(); //YOUR PHP SCRIPT...

Отправка POST запроса серверу
Здравствуйте. Пишу приложение для Android, которое получает данные о местонахождении и отправляет...

Отправка Post запроса в Android предложении
Есть определенная php страница надо отправить на нее Post запрос из Android приложения Например...

Отправка post запросов на сервер
доброго, имеется программа на пк и хочу сделать аналог для андроида, но в андроиде я не силен, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru