J'ai besoin de rediriger un utilisateur vers un site externe via une requête POST.
La seule option que j'ai trouvée est de le faire, de soumettre un formulaire via JavaScript.
Des idées?
Ce que vous voulez dire n'est pas tout à fait clair, alors prenons quelques scénarios:
L'utilisateur doit POST se former sur un serveur autre que le vôtre
Facile, spécifiez simplement la cible comme action de formulaire:
<form action="http://someotherserver.com" method="post">
L'utilisateur doit être redirigé après une soumission réussie POST
Facile, acceptez et traitez les données POST comme d'habitude, puis répondez avec un en-tête de redirection 302
Ou 303
.
L'utilisateur doit POST données sur votre serveur et, après validation, vous voulez POST ces données sur un autre serveur
Légèrement délicat, mais trois options:
307
, Ce qui signifie que l'utilisateur doit tenter la même demande à une autre adresse. Théoriquement, cela signifie que le navigateur doit POST les mêmes données sur un autre serveur. Je ne sais pas si cela est bien pris en charge, mais tout navigateur comprenant HTTP1.1 devrait être en mesure de le faire. AFAIA n'est pas souvent utilisé dans la pratique.Voir ici pour une liste de toutes les options de redirection HTTP: http://en.wikipedia.org/wiki/Http_status_codes#3xx_Redirection
Définissez simplement l'URL d'action du formulaire HTML sur le site externe particulier.
Voici un SSCCE , copiez-le simplement et copiez-le:
<!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>
Vous verrez que Stackoverflow a une bonne protection CSRF;)
Javascript est le seul moyen (de le faire automatiquement). Vous ne pouvez tout simplement pas rediriger une requête POST
via les méthodes standard http
. Êtes-vous sûr que GET
n'est pas une option ici?
L'utilisation d'un formulaire est probablement votre seule option en tant que liens, redirections HTTP et <meta http-equiv="refresh" >
ne fera que charger le navigateur d'une autre URL en utilisant la méthode GET .
Cependant, vous n'avez pas nécessairement besoin d'utiliser JavaScript pour soumettre un formulaire. Si une certaine interaction de l'utilisateur est acceptable, vous pouvez utiliser un formulaire avec des <input type="hidden">
et laissez l'utilisateur appuyer sur le bouton d'envoi.
Vous pouvez également vous assurer que la page vers laquelle vous redirigez n'accepte pas déjà les paramètres GET. Certains scripts acceptent à la fois GET et POST sans distinction.