Мне нужно перенаправить пользователя на внешний сайт, хотя запрос POST.
Единственный вариант, который я выяснил, - это отправить форму через JavaScript.
Любые идеи?
Мне нужно перенаправить пользователя на внешний сайт, хотя запрос POST.
Единственный вариант, который я выяснил, - это отправить форму через JavaScript.
Любые идеи?
Не совсем понятно, что вы имеете в виду, поэтому давайте рассмотрим несколько сценариев:
Пользователь должен создать форму POST на сервере, отличном от вашего собственного
Легко, просто укажите цель как действие формы:
<form action="http://someotherserver.com" method="post">
Пользователь должен быть перенаправлен после успешной отправки POST
Легко, принимайте и обрабатывайте данные POST как обычно, а затем отвечайте заголовком 302
или 303
перенаправления.
Пользователь должен отправлять POST-данные на ваш сервер и после проверки вы хотите отправить данные на другой сервер
Немного сложно, но три варианта:
307
, что означает, что пользователь должен попробовать тот же запрос на другом адресе. Теоретически это означает, что браузер должен отправлять одни и те же данные другому серверу. Я не совсем уверен, насколько хорошо это поддерживается, но любой браузер, понимающий HTTP1.1, должен это сделать. AFAIA он не использовал это часто на практике. См. здесь список всех опций перенаправления HTTP: http://en.wikipedia.org/wiki/Http_status_codes#3xx_Redirection
Просто установите URL-адрес действия формы HTML на конкретный внешний сайт.
Здесь SSCCE, просто скопируйте'paste'n'run it:
<!doctype html>
<html lang="en">
<head>
<title>SO question 2604530</title>
</head>
<body>
<form action="http://stackoverflow.com/questions/2604530/answer/submit" method="post">
<textarea name="post-text"></textarea>
<input type="submit" value="Post Your Answer">
</form>
</body>
</html>
Вы увидите, что Stackoverflow имеет хорошую защиту CSRF;)
Javascript - единственный способ (сделать это автоматически). Вы просто не можете перенаправить запрос POST
с помощью стандартных методов http
. Вы уверены, что GET
здесь не вариант?
Использование формы, вероятно, является вашим единственным вариантом в качестве ссылок, перенаправления HTTP и <meta http-equiv="refresh" >
приведет только к тому, что браузер загрузит другой URL-адрес с помощью метода GET.
Вам необязательно использовать JavaScript для отправки формы. Если какое-либо взаимодействие с пользователем приемлемо, вы можете использовать форму с некоторыми полями <input type="hidden">
и позволить пользователю нажать кнопку отправки.
Вы также можете убедиться, что перенаправляемая страница не принимает параметры GET. Некоторые скрипты принимают GET и POST без разбора.