2009-12-06 4 views
1

J'ai un formulaire sur mon site qui envoie des données à un site distant - formulaire html simple. Ce que je veux faire est d'utiliser l'utilisateur de données entre dans le formulaire à des fins statistiques. Donc, au lieu d'envoyer des données à la page distante, je l'envoie d'abord à mon script qui le renvoie sur le site distant. Le truc, c'est que j'ai besoin d'un comportement exact de la forme habituelle pour que l'utilisateur se rende au site distant et affiche des ressources.Faire cURL se comporter comme exactement la forme

Lorsque j'utilise ce code, il fonctionne un peu, mais pas la façon dont je veux à:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $action); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
$result = curl_exec($ch); 
curl_close($ch); 

problème est qu'il affiche une réponse dans le même script. Par exemple si $ action est par exemple: somesite.com/processform.php et mon nom de script est mysqcript.php il affichera la réponse de "somesite.com/processform.php" à l'intérieur de "mysqcript.php" donc tous les relatifs les liens ne fonctionnent pas. Comment puis-je l'envoyer à "somesite.com/processform.php"? Même chose qu'en appuyant sur le bouton?

Leonti

Répondre

0

Il y a plusieurs façons de le faire. Voici l'un des plus faciles: il suffit d'utiliser une redirection 307.

header('Location: http://realsite.com/form_url.php', true, 307'); 

Vous pouvez faire votre exploitation forestière et d'autres choses avant ou après header() mais si vous le faites après avoir appelé header() vous devez commencer votre script avec

ignore_user_abort(true); 

Notez que les navigateurs sont censés informer la l'utilisateur que son formulaire est en cours de redirection.

1

Je pense que vous aurez à faire sur votre fin, comme la traduction des chemins relatifs est le travail du client. Il doit être simple: Il suffit de prendre le répertoire de base de la demande que vous avez fait

http://otherdomain.com/my/request/path.php 

et ajoutez-devant chaque lien sortant qui ne commence pas par «/» ou un protocole (« http: // », "ftp: //").

La détection de tous les liens sortants est difficile, mais je suis sûr à 100% qu'il existe des classes PHP prêtes à l'emploi qui le font. Vérifiez par exemple this article et la fonction getLinks() dans les commentaires de l'utilisateur. Je ne suis pas sûr à 100% si c'est ce dont vous avez besoin, mais il va certainement dans la bonne direction.

1

Voici quelques solutions possibles, je poste séparément afin qu'ils ne avec celui se mélangent pas, je recommande:

1 - continuer à utiliser cURL, analyser la réponse et ajouter un <base/> tag à lui. Cela devrait fonctionner pour à peu près tout sur cette page.

<base href="http://realsite.com/form_url.php" /> 

2 - ne modifiez pas l'URL de soumission. Soumettre le formulaire à l'URL réelle, mais capturer son contenu en utilisant une bibliothèque Javascript (YUI fait cela) et l'envoyer à votre script via XHR. C'est toujours un peu hacky.

Questions connexes