2010-03-12 5 views
1

J'ai un script hébergé quelque part qui n'accepte que les requêtes POST. exemple, some.hosted/script.phpphp pour traduire la requête GET en requête POST

comment puis-je configurer un autre php simple qui peut accepter la requête GET et l'envoyer ensuite au script hébergé. afin que je puisse mettre en place un lien comme ceci: other.site/post2hostedscript.php?postthis=data puis POST postthis = données vers le script hébergé.

TNX

modifier: post2hostedscript.php ne donnent aucun résultat. le résultat ira directement à some.hosted/script.php exactement comme si l'utilisateur POST directement sur le script hébergé.

+0

Et qu'est-ce que ce script est censé renvoyer après la requête GET? La réponse de l'autre script après le POST? –

+0

Pourquoi un simple array_merge ($ _ POST, $ _GET) ne fonctionnerait-il pas? Vous pouvez ensuite appeler n'importe quel script, je pense. Je ne sais pas si des problèmes imminents. – pinaki

+0

Pas une bonne idée.GET et POST sont conçus pour être séparés afin que les agents utilisateurs sachent ce qu'ils font lorsqu'ils suivent un lien ou publient un formulaire, c'est-à-dire que suivre un lien ne devrait pas avoir d'effets secondaires et émettre une requête GET plusieurs fois devrait avoir le même effet que de l'émettre une fois. –

Répondre

1

Jetez un oeil aux fonctions "curl", ils fournissent tout ce dont vous avez besoin.

3

Votre post2hostedscript.php devra:

  • Fetch tous les paramètres reçus comme GET
  • Construct POST requête
  • Envoyez-
  • Et, sans doute, renvoyer le résultat de cette requête POST.


Cela peut probablement être fait en utilisant curl, par exemple; quelque chose comme cela devrait vous aider à démarrer:

$queryString = $_SERVER['QUERY_STRING']; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.othersite.com/post2hostedscript.php"); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $queryString); 
curl_exec($ch); 
curl_close($ch); 

Pour une liste d'options qui peuvent être utilisées avec boucle, vous pouvez jeter un oeil à la page de curl_setopt.


Ici, vous devrez utiliser, au moins:

  • CURLOPT_POST: que vous voulez envoyer une requête POST, et non à un GET
  • CURLOPT_RETURNTRANSFER: selon que vous voulez curl_exec pour renvoyer le résultat de la requête, ou simplement le sortir.
  • CURLOPT_POSTFIELDS: Les données qui seront affichées - c'est-à-dire ce que vous avez dans la chaîne de requête de votre demande entrante.

Et notez que la réponse de la requête POST peut inclure un en-tête HTTP intéressant - le cas échéant, vous devrez les chercher (voir l'option CURLOPT_HEADER) et ré-envoyer les intéressants votre propre réponse (voir la fonction header).

+1

+1 note cependant que les données GET ne doivent pas dépasser 1024 octets et que les téléchargements de fichiers sont impossibles. –

+0

@Pekka: droit sur les téléchargements de fichiers, et une limite sur la taille de GET * (Même si j'aurais dit que la limite est supérieure à 1k, j'aurais dit 2k sur certains navigateurs, et 32k sur d'autres?) * –

+2

@Pascal && @Pekka: Jetez un oeil à http://www.boutell.com/newfaq/misc/urllength.html - Quoi qu'il en soit, personnellement, je considérerais tout au-dessus de 1024 octets trop longtemps. – dbemerlin

-1

Vous pouvez envisager de remplacer toutes les instances de $ _POST dans l'ancien script par $ _REQUEST, ce qui entraînera l'acceptation à la fois de GET et de POST.

Questions connexes