powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / http get запрос. Добавить тело запроса
12 сообщений из 12, страница 1 из 1
http get запрос. Добавить тело запроса
    #39857808
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Нужно сделать 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
http get запрос. Добавить тело запроса
    #39857966
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для запросов GET параметры передаются в строке URL

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

Поэтому они так и называются: GET и POST
...
Рейтинг: 0 / 0
http get запрос. Добавить тело запроса
    #39857987
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выяснил, что можно использовать 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
http get запрос. Добавить тело запроса
    #39858001
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,

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

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

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

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

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

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

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

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


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