Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / http get запрос. Добавить тело запроса / 12 сообщений из 12, страница 1 из 1
05.09.2019, 11:37
    #39857808
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
Здравствуйте.
Нужно сделать GET запрос на сервер, имеется url, имя пользователя, пароль, и параметр grant_type.
Имя пользователя, пароль и grant_type надо передать в теле запроса
Начинаю следующим образом:

Код: java
1.
2.
3.
URL url = new URL(tokenUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");



Если пытаться добавить эти параметры методом
Код: java
1.
conn.addRequestProperty("key", "value");


то ничего не получается, т.к. сервер хочет получить эти параметры не в заголовке, а в теле запроса

Подскажите, как добавить body к GET запросу.
...
Рейтинг: 0 / 0
05.09.2019, 15:13
    #39857966
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
для запросов GET параметры передаются в строке URL

в теле запроса передается для запросов POST (PUT)

Поэтому они так и называются: GET и POST
...
Рейтинг: 0 / 0
05.09.2019, 15:38
    #39857987
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
Выяснил, что можно использовать 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
        try {
            URL  url = new URL(myUrl);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.setRequestMethod("POST");
            Map<String, String> params = new HashMap<>();
            params.put("grant_type", "password");
            params.put("username", myUserName);
            params.put("password", mtPassword);

            StringBuilder postData = new StringBuilder();
            for (Map.Entry<String, String> param : params.entrySet()) {
                if (postData.length() != 0) {
                    postData.append('&');
                }
                postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
                postData.append('=');
                postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
            }

            byte[] postDataBytes = postData.toString().getBytes("UTF-8");
            connection.setDoOutput(true);
            try (DataOutputStream writer = new DataOutputStream(connection.getOutputStream())) {
                writer.write(postDataBytes);
                writer.flush();
                writer.close();
                StringBuilder content;

                try (BufferedReader in = new BufferedReader(
                        new InputStreamReader(connection.getInputStream()))) {
                    String line;
                    content = new StringBuilder();
                    while ((line = in.readLine()) != null) {
                        content.append(line);
                        content.append(System.lineSeparator());
                    }
                }
                System.out.println(content.toString());
            } finally {
                connection.disconnect();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }



Это не работает, получаю ошибку java.net.ConnectException: Connection timed out: connect на строке
Код: java
1.
 try (DataOutputStream writer = new DataOutputStream(connection.getOutputStream())) {



Есть вопросы:
1. В урл указан протокол https. Нужно ли в таком случае использовать HttpsURLConnection вместо HttpURLConnection?
2. Запрос делаю в программе Postman. Работает только если отключить SSL certificate verification. Может быть в моей программе тоже надо отключить верификацию сертификата? Если да, то как это сделать?
...
Рейтинг: 0 / 0
05.09.2019, 15:59
    #39858001
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
Павел Гужанов,

Твой вопрос уже был тут.
Нужен заведомо работающий клиент. Например из ослика эксплорера есть контакт?
...
Рейтинг: 0 / 0
05.09.2019, 16:03
    #39858005
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
connection.setDoOutput(true);
try (DataOutputStream writer = new DataOutputStream(connection.getOutputStream())) {

Между этими двумя строчками метод connect(); вызывать не нужно?

Есть вопросы:

Не знаю.
НО, если метод GET у тебя работал (уходил на сервер и возврашался ответ). то не вижу причин, что бы были какие-то проблемы с методом POST.
...
Рейтинг: 0 / 0
05.09.2019, 16:08
    #39858012
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
2. Если в консоли или перехвате не видно слов сертификат, то не нужен ssl.
Тогда обычный клиент с примером из сети.
...
Можно свой сервлет поднять за 30 минут локально для тестов.
...
Рейтинг: 0 / 0
05.09.2019, 16:17
    #39858023
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
P.S.

Те примеры, которыя я вижу в I-net'е, дополнительно как минимум устанавливают
conn.setRequestProperty( "Content-Type"
conn.setRequestProperty( "charset"
conn.setRequestProperty( "Content-Length"

Т.ч. "на просторах интернета следующее" выглядит как-то слишком премитивно. Content-Length явно желательно ставить, а для общения с SOAP серверами и корректный Content-Type
(что там считается корректный - х.з. Желательно у поставщика SOAP спришивать. В свое время 2 месяца разбирался с найденным "на просторах интернета", пока работающий пример из заказчика не выбилю SOAP сервер занимался самодеятельностью по перекодировки CR <--> CR/LF при "неправильном" Content-Type)
...
Рейтинг: 0 / 0
05.09.2019, 16:23
    #39858027
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
P.P.S.

Connection timed out:- как бы говорит, что мы нифига не смогли присоединится или какие-то проблемы со связью
Была бы проблема с HTTPS - было бы логично ожидать слов про сертификаты или что-то еще

Если пофантазировать, то возможно, что если сервер ожидает корректный Content Length и получил 0, то просто он не ждет входные данных и уже банально тупо отсылает нам ответ. Насколько я помню, для "потокового" общения (когда Content Length не известен) нужно специальный Content-Type указывать.

Я бы заголовки более-менее корректно указывал.

но чисто на уровне "если пофантазировать"
...
Рейтинг: 0 / 0
05.09.2019, 17:17
    #39858067
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
Помучился по всякому, и с заголовками в том числе.
Ничего не помогает.
Но попробовал указать урл яндекса - та же фигня, коннекшн таймаут.
Видимо что-то с настройками копать надо.
...
Рейтинг: 0 / 0
05.09.2019, 17:26
    #39858079
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
Возьми нормальный клиент типа HttpClient, с дефолтным долго долбиться будешь
...
Рейтинг: 0 / 0
05.09.2019, 17:28
    #39858082
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
Павел ГужановНо попробовал указать урл яндекса - та же фигня, коннекшн таймаут.сравнивай заголовки при IE и от тебя.
...
Рейтинг: 0 / 0
05.09.2019, 18:29
    #39858113
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http get запрос. Добавить тело запроса
забыл никВозьми нормальный клиент типа HttpClient, с дефолтным долго долбиться будешь
Если OpenJdk-11 то там должен быть HttpClient получше чем UrlConnection.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / http get запрос. Добавить тело запроса / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]