Как отправить 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); >);
HTTP-запрос методом POST.

Кроме метода GET, который мы рассмотрели в предыдущей заметке, существует еще один метод отправки запроса по протоколу HTTP – метод POST. Метод POST тоже очень часто используется на практике.

Если, для того, чтобы обратиться к серверу методом GET, нам достаточно было набрать запрос в URL-адрес, то в методе POST все работает по другому принципу.
Для того, чтобы выполнить этот вид запроса, нам необходимо нажать на кнопку с атрибутом type=»submit», которая расположена на веб-странице. Обратите внимание, что эта кнопка расположена в элементе , у которого установлен атрибут method со значением post.
Рассмотрим этот HTML-код:

Если пользователь введет в текстовое поле какой-либо текст и нажмет на кнопку «Отправить», то на сервер будет отправлена переменная text со значением того содержимого, которое ввел пользователь. Эта переменная будет отправлена методом POST.
Если в форме написать так:
То данные будут отправляться методом GET.
Если, в случае с GET-запросом, объем данных, которые мы могли передать ограничивался длиной адресной строки браузера, то в случае с запросом POST, такого ограничения нет, и мы можем передавать значительные объемы информации.
Еще одно отличие метода POST от GET, метод POST скрывает все передаваемые им переменные и их значения, в своём теле (Entity-Body). В случае с методом GET они хранились в строке запроса (Request-URI).
Вот пример запроса, выполненного методом POST:
POST / HTTP/1.0\r\n Host: www.site.ru\r\n Referer: http://www.site.ru/index.html\r\n Cookie: income=1\r\n Content-Type: application/x-www-form-urlencoded\r\n Content-Length: 35\r\n \r\n login=Dima&password=12345
Таким образом, передавая данные методом POST, их будет намного труднее перехватить злоумышленнику, т.к. они скрыты от непосредственного просмотра, поэтому метод передачи данных методом POST считается более безопасным способом.
Кроме того, методом POST можно передавать не только текст, но и мультимедиа данные (картинки, аудио, видео). Существует специальный параметр Content-Type, который определяет тот вид информации, который необходимо передать.
Ну и, наконец, чтобы на сервере получить данные, которые были переданы этим методом, используется переменная POST.
Вот пример обработки на языке PHP:
Все мои уроки по серверному программированию здесь.
Отправка 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 запрос?

Тем не менее, такой же запрос в postman проходит. Подозреваю, что неправильно дату передаю
Отслеживать
Clark Devlin
задан 30 июн 2020 в 15:37
Clark Devlin Clark Devlin
1,435 1 1 золотой знак 14 14 серебряных знаков 32 32 бронзовых знака
Но ведь не такой же, в postman вы явно выбрали form-data вместо json
30 июн 2020 в 15:40
Причём в реальности на сайте используется вообще x-www-form-urlencoded
30 июн 2020 в 15:42
а, точно. А в каком формате тогда мне нужно сделать переменную data ? И как передать в запрос? requests.post(url=url, headers=headers, data=data) ?
30 июн 2020 в 15:42
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Попробуй все тоже самое, но без headers — у меня работает:
import requests url = 'https://carte.by/auth/' data = r = requests.post(url, data=data) print(r.status_code) print(r.json)
В результате ответ 200:
Осталось только указать другой логин.
Отслеживать
ответ дан 30 июн 2020 в 17:35
325 1 1 серебряный знак 9 9 бронзовых знаков
ошибку запроса возвращает
30 июн 2020 в 18:06
Попробуй еще раз, я в коде ошибку допустил (надо data указывать, а не json), теперь поправил. Было r = requests.post(url, headers=headers, json=data) , теперь r = requests.post(url, data=data) . Должно работать