Это в основном код, который я имею:
// in file1.php
<?php print_r($_POST); ?>
<form method="POST" action="http://localhost:1234">
<button type="submit" value="3" name="q">Register</button>
</form>
// in server.js
app.post('/', (req, res) => {
request.post(
req.headers.referer,
{ form: { test: "mytest" } },
function (error, response, body) {
if (!error && response.statusCode == 200) {
// Print out the response body
res.set("POST", "test=1234");
res.redirect(302, req.headers.referer);
}
});
});
app.listen(1234);
Вот что должен делать этот код:
Когда я в file1.php
и я нажимаю Register
кнопку, он должен отправить запрос назад file1.php
с { test: "mytest" }
как заголовки постов из http://localhost:1234
; file1.php
что-то делает с этим почтовым запросом и отправляет ответ http://localhost:1234
(внутри обратного вызова в request.post()
), тогда он должен изменить заголовки POST на { test: 1234 }
, перенаправить на file1.php
и показать Array([test]=>1234) [Register button]
на экране.
Проблема в том, что я не могу заставить его работать, чтобы отобразить этот текст на экране, кажется, что заголовки не меняются или я не меняю их должным образом. Что я могу сделать?
Я думаю, что вы путаете заголовки с телом запроса, а имена заголовков с методом HTTP.
С этим:
res.set("POST", "test=1234");
Вы можете только изменить заголовок ответа и не указывать клиенту использовать этот заголовок после выполнения перенаправления.
Кроме того, установка заголовка с именем POST не будет передавать данные, помещенные в значение этого заголовка, в теле запроса POST.
Кажется, что вы пытаетесь сделать результат перенаправления в запросе POST с определенными полями, передаваемыми в теле, но здесь вы устанавливаете заголовок с именем POST с тем, что вы, вероятно, хотите установить в теле. Это не будет работать таким образом.
Обычное перенаправление (301 перемещено навсегда или найдено 302) всегда приводит к запросу GET, даже если перенаправление является ответом на POST, потому что на практике 301 и 302 работают как 303 См. Другое, что приводит к запросу GET. Существует временное перенаправление 307, которое явно запрещает изменение метода HTTP, но браузеры должны предупреждать пользователей перед выполнением таких перенаправлений, и это может не всегда работать. Смотрите этот ответ для более подробной информации:
Невозможно изменить POST-запрос клиента при перенаправлении таким способом, если, конечно, вы не хотите прокси-запрос, если сервер выполняет перенаправление от имени клиента.
Но есть некоторые решения для вас, сначала используйте 307 вместо 302, чтобы перенаправить ваш пост-запрос с телом
res.redirect(307, "http://badasse.com/api/t2");
Затем вы можете передать дополнительные данные через параметры GET.
res.redirect(307, "http://badasse.com?morePost="+encodeURIComponent(JSON.stringify({data1: "yolo"}));
Или заголовки:
res.setHeader("MyHeader", "MyStringifiedDatas")
Или просто попробуйте использовать сессию
req.session['success'] = 'User added successfully';