2009-10-08 6 views
1

J'avais pensé que j'utiliserais curl pour cela mais il me semble que je me suis trompé. Ce que je dois faire est d'attraper un poste et faire des recherches de base de données à des fins de validation, puis publier les données validées à une URL distante.Validation côté serveur puis publication dans le script distant

Je l'ai fait en remplissant un formulaire html et en le soumettant en utilisant javascript, mais cela a des défauts évidents. Je veux construire un post et envoyer le navigateur exactement comme s'ils avaient posté un formulaire à l'URL distante.

Ai-je raté quelque chose dans les docs curl? Qu'est-ce qu'un bon ™ façon de faire cela?

Répondre

2

Vous pouvez utiliser curl pour cela.

Mais vous pourriez avoir d'autres problèmes à considérer. Les cookies, les sessions, etc. sont définis lorsqu'un navigateur publie physiquement sur l'autre URL. Ceux-ci peuvent ne pas être définis lors de la publication depuis le serveur. Vous devriez également vérifier les questions de grattage d'écran sur SO pour plus d'informations à ce sujet. En supposant que ce ne soit pas le cas, vous devriez être en mesure d'obtenir la publication, de valider les champs et de la rediffuser à l'aide de curl. Il y a manymanyexamples de doing this.

modifier

  • sous forme de courrier à votre server.php
  • processus
  • /valider les champs dans server.php
  • paramètres validés post en utilisant une boucle pour remote.service
+0

Merci pour la réponse, en particulier les modifications! L'exemple de David Walsh était ce dont j'avais besoin. Je me suis perdu dans les options curl_setopt. – jerrygarciuh

2

I Je ne l'ai pas essayé, mais ce que je ferais, c'est soumettre le formulaire à sa destination finale et ajouter une fonction javascript onSubmit() qui fait une requête ajax à votre serveur et renvoie un vrai ou faux.

C'est, si vous pouvez compter sur javascript ...

+0

Cette approche est excellente et ne nécessite aucune ressource côté serveur. –

+0

Cela serait acceptable tant que cela ne vous dérange pas si l'utilisateur connaît l'URL finale, ce qui lui donne la possibilité de publier les données qu'il souhaite sur votre destination finale. –

+0

@Matt Huggins: Très vrai.Vous pourriez bien sûr avoir cette même requête ajax return/définir la destination finale si vous voulez éviter cela. – jeroen

2

Juste ont la demande/réponse se présenter comme suit:

+---------+ request +--------+ curl request +--------+ 
|   | -----------> |  | ---------------> |  | 
| browser |    | url #1 |     | url #2 | 
|   | <----------- |  | <--------------- |  | 
+---------+ response +--------+ curl response +--------+ 

L'utilisateur assis derrière le navigateur ne l'avantage de sachant que l'URL finale (URL # 2 ci-dessus) est car il n'est nulle part dans la source HTML, de sorte qu'ils ne vont jamais pirater et passer l'URL de l'intermédiaire (url # 1) manuellement.

1

Je trouve que l'émission d'un "wget" tend à être plus facile à gérer que CURL.

$remoteContent = `wget -o - http://someremoteurl`; 

En dehors de cela, la réponse de Matt est correcte. Cependant vous si la réponse du site distant que vous capturez à l'écran contient des liens, vous devrez les rechercher et les remplacer (si vous voulez les gérer vous-même) - à quel point vous créez un serveur proxy. ..

-CF

Questions connexes