POST-запрос
POST-запрос по своей структуре сложнее GET-запроса : он имеет заголовок и тело. Передать POST-запрос через адресную строку браузера нельзя, требуется специализированный механизм отправки запросов.
POST-запрос может быть предпочтительнее при необходимости отправить в бизнес-процесс большое количество параметров. При помощи POST-запроса их можно передать неограниченное количество. Максимальное количество параметров, которое можно передавать GET-запросом, ограничено максимальной длиной заголовка запроса – от двух тысяч символов в зависимости от используемых веб-сервера и веб-клиента. В большинстве случаев этого более чем достаточно, но если требуется, например, передать в переменную некоторый текст, этого лимита может не хватить.
Кроме того, HTTP-POST запросы не имеют ограничений на тип передаваемых параметров. Возможность использования POST-запросов будет полезна при интеграции системы ELMA с простыми веб-приложениями в случае, если требуется передавать в систему ELMA большой объем данных или файлы.
Простейший способ отправить POST-запрос — использовать HTML форму, для которой указан метод передачи данных «post».
ID Партнера:
Отправка данной формы приведет к запуску бизнес-процесса с токеном 995ea844-74a8-413b-96be-bc92462eff85 на сервере ELMA, расположенном на http://elma.someorg.ru. При этом бизнес-процесс будет запущен с определенными стартовыми параметрами. Перед началом выполнения процесса в его контекст будет загружено пять переменных: Name, Surname, Fathername, Age, Partner.
Возможность запуска бизнес-процессов при помощи POST-запроса имеется только при условии, что процесс был опубликован с корректно сформированным токеном и установленными флажками Запуск из внешних систем и Веб-запрос (POST) в блоке Варианты запуска процесса (рис. 2).
Как отправить post запрос javascript
Для отправки POST/GET запроса (и других) можно использовать Fetch API . Fetch API — это современная альтернатива XMLHttpRequest для работы с асинхронными HTTP запросами. Так, используя метод fetch() и указав необходимые параметры мы можем отправить или получить данные по сети.
// Определяем функцию которая принимает в качестве параметров url и данные которые необходимо обработать: const postData = async (url = '', data = <>) => // Формируем запрос const response = await fetch(url, // Метод, если не указывать, будет использоваться GET method: 'POST', // Заголовок запроса headers: 'Content-Type': 'application/json' >, // Данные body: JSON.stringify(data) >); return response.json(); >
postData('https://example.com/answer', answer: 42 >) .then((data) => console.log(data); >);
Отправка POST-запроса в JavaScript как отправка формы
Когда будет речь о перенаправлении браузера на другую страницу, одним из распространенных способов является использование GET-запроса. Он выглядит примерно так:
document.location.href = 'http://example.com/q=a';
Однако, в некоторых случаях, ресурс, к которому происходит обращение, может корректно отвечать только на POST-запросы. Если мы не генерируем такой запрос динамически, то можем использовать HTML-форму следующего вида:
А затем просто отправить эту форму из DOM. Но что если мы хотим использовать JavaScript для отправки такого запроса? Как выглядит код, который позволяет выполнить что-то вроде этого:
post_to_url('http://example.com/', );
Нужно учесть, что требуется решение, которое изменяет текущий URL браузера, аналогично отправке формы. Если это возможно с использованием XMLHttpRequest, то это не очевидно. Это не должно быть асинхронным и использовать XML, поэтому Ajax здесь не подходит.
Лучший кросс-браузерный подход предполагает создание формы с помощью JavaScript, добавление ее в DOM, а затем ее отправку. Вот как это выглядит:
function post_to_url(path, params) < var form = document.createElement('form'); form.method = 'POST'; form.action = path; for(let key in params) < if(params.hasOwnProperty(key)) < var hiddenField = document.createElement('input'); hiddenField.type = 'hidden'; hiddenField.name = key; hiddenField.value = params[key]; form.appendChild(hiddenField); >> document.body.appendChild(form); form.submit(); >
В этом коде создается новая форма с указанным путем и методом POST. Затем, для каждого ключа в переданном параметре, создается новое скрытое поле ввода и добавляется в форму. После этого форма добавляется в тело документа и отправляется. Именно так можно реализовать POST-запрос, похожий на отправку формы, с использованием JavaScript.
Как можно отправить свой POST-запрос?
Всем привет!
Мне нужно отправлять POST-запросы с разными данными на сервер одной игры и посмотреть на результаты, которые он будет возвращать. Как это сделать? Ничего незаконного, я просто эээээээкссспериментирую)
Пытался отправлять через HTML-форму с POST-методом, но сервер походу блокирует вхождения через браузер.
- Вопрос задан более года назад
- 348 просмотров
Комментировать
Решения вопроса 1
Токсичный шарпист
Вместо браузера используй те инструменты, которые для этого предназначены.
Уже названный консольный curl вполне подходит для этого.
Если консоль для тебя не очень привычный инструмент — попробуй postman
Ответ написан более года назад
Нравится 3 7 комментариев
0x0000002F @0x0000002F Автор вопроса
А что если мне нужно отправить еще и определенные заголовки, параметры?
Да, их можно вроде настроить на postman, но у меня их довольно много.
0x0000002F, руками заполняешь все нужные заголовки.
На твоём скрине не видно какие именно нужны.
0x0000002F @0x0000002F Автор вопроса
Василий Банников, тогда добавлю два скрина.
В сетях не шарю, по этому замазал некоторые поля наугад, чтобы, мало ли, не вычислили))
1 — данные о Wireshark-фрейме; Ethernet; IP
2 — TCP; HTTP; POST
0x0000002F, тебя должны интересовать только HTTP-заголовки. Всё остальное — это идёт ниже уровнем и значения не имеет.
Из заголовков тут важный только Content-Type и Accept (остальные, типа Host и Content-Length служебные и автоматически подставляются клиентом)
Что кстати скрывается за открывашкой напротив POST /database/accounts/. ?
0x0000002F @0x0000002F Автор вопроса
Василий Банников, нет, не вышло. Почему-то постоянно выдает 403 ошибку. Пытался и на питоне через requests, то же самое. Хотя почему-то игра может подключиться
Изменено. Выяснил, что при своем запросе присутствуют лишние заголовки.
Rubix, открывашка — это треугольник слева, при нажатии на который появляется скрытое содержимое.
Ну почему 403 сложно сказать.
Я бы ещё попробовал вместо wireshark использовать более специализированные инструменты, типа charles
0x0000002F @0x0000002F Автор вопроса
Василий Банников, хах, про открывашку буду знать))
В общем, получилось. Я обнулил некоторые заголовки
import requests url = 'http://www.boomlings.com/database/accounts/loginGJAccount.php'; headers = < 'User-Agent': '', 'Accept-Encoding': '', 'Connection': '' >data = < 'udid': '. ', 'userName': '. ', 'password': '. ', 'secret': '. ' >x = requests.post(url, headers=headers, data=data); print(x.content);
Ответы на вопрос 1
curl — самый продвинутый инструмент, есть как консольная утилита так и библиотека, есть практически для всех языков
Помимо данных POST есть еще http заголовки, в которых может содержаться данные об авторизации (например цифровая подпись) или сессия.. . возможно браузер добавил ненужный тег (маловероятно, скорее недостает нужного)
Еще момент, у post есть разные формы передачи данных, грубо говоря загрузка файла или именованные атрибуты (это классическая html форма)
Ответ написан более года назад
Нравится 1 2 комментария
0x0000002F @0x0000002F Автор вопроса
Я мониторил запрос в Wireshark. Я вижу в запросе все пакеты, которые отправляются. То есть там есть и заголовки. Мне нужно оставить всё, кроме нескольких значений и потом отправить вручную. Например, udid (Уникальный ID устройства), логин, пароль.
0x0000002F, ну у тебя вся необходимая информация на руках есть, какие проблемы то
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Компьютерные сети
Как в наше время получить статический ip через прокси?
- 1 подписчик
- час назад
- 30 просмотров