Bonjour,
Quelqu'un parmi vous aurais des connaissances et / ou des ressources sous php Curl ?
A part la documentation du site PHP, je ne trouve pas de tutoriel assez clairs .. Je n'y comprend pas grand chose.
Je souhaiterais avec php CUrl établir une connexion entre deux serveurs distant pour :
<?php
$url = 'http://www.oseox.fr';
$timeout = 10;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
if (preg_match('`^https://`i', $url))
{
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Utilisation de la méthode POST
curl_setopt($ch, CURLOPT_POST, true);
// Définition des champs et valeurs à envoyer
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'email' => 'user@domain.tld'
));
$page_content = curl_exec($ch);
curl_close($ch);
echo $page_content;
?>
Merci
Moi je vois plutôt ton traitement.php côté serveur 2 qui récupère les données en POST.
Après tu peux renvoyer un résultat en curl si tu le souhaite du serveur 2 vers serveur 1, mais c'est pas utile vu que ton serveur 1 attend une réponse de ton serveur 2 après l'envoie des données en curl.
Voici un exemple simple mais concret:
(Ton code coté serveur 1):
$ch = curl_init();
$url = "https://mon-serveur2.fr/traitement.php";
// Tes données à envoyer
$datas = array('email' => 'exemple@test.fr');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);
// Résultat retourné
$result = curl_exec($ch);
// En cas d'erreur
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}else{
// Afficher le résultat du serveur 2, ici 'email bien reçu'
echo $result;
}
// On ferme curl
curl_close ($ch);
(Ton code coté serveur 2):
if(!empty($_POST) && isset($_POST['email']){
echo 'email bien reçu';
}
En faite si tu as bien compris le truc, php curl envoye des données en GET/POST sur une page php, dans ton cas sur une page php de ton second serveur qui vas les récupérer.
Donc c'est sur ton second serveur qu'il faut que tu traites la réception des données, faire les vérifications et retourner une erreur ou non en json par exemple.
Ta variable $page_content
contient le contenu retourner de ta page du second serveur, donc si tu souhaites afficher les informations envoyées, vérifi que ton second serveur ne renvoi pas une erreur pour ensuite afficher simplement tes $_POST
.
Par contre pour le https il n'est pas du tout recommander de faire ceci si tu transportes des données confidencielles (type password) :
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
Aide toi de ces liens :
http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/
https://stackoverflow.com/questions/521418/reading-ssl-page-with-curl-php
Merci pour ta réponse !
Du coup mon traitement.php (celui que je met dans l'action du formulaire du serveur 1) se trouvera dans mon serveur 2 c'est bien ça ?
Et j'y rentrerais le code curl.
Le $url correspond à quoi exactement ? (La page où est mon formulaire je suppose ?)
Pour récupérer mes données de formulaire c'est bien ici :
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'email' => 'user@domain.tld'
));
Ici le 'email' correspond au 'name' et 'user@domain...' au 'value' de mon input c'est bien ça ?
Est ce que ce serais comme ça :
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'nom' => $_POST['nom'],
'prenom' => $_POST['prenom'],
etc....
Sur ton serveur 2, tu récupères ton tableau array('email' => 'user@domain.tld')
envoyé par curl comme ceci sur ton traitement.php
Le $url
, c'est l'url absolut de ton fichier traitement.php
sur ton serveur 2, exemple => http://www.oseox.fr/traitement.php
.
Ta fonction curl vas juste lui transmettre en post
les données dans ton tableau, ici c'est :
Côté serveur 1 (tu envoie les données au serveur 2)
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'email' => 'user@domain.tld'
));
côté serveur 2 (je reçois les données pour effectuer des actions)
$_POST['email'];
Donc si j'ai bien compris :
Sur mon serveur 1 j'ai ma page traitement.php où je rajoute curl_setopt ?
sur mon serveur 2 : Je récupère les données avec du curl et les POST.
Ce n'est pas possible d'avoir la page traitement.php sur mon serveur 2 directement ?
D'accord je pense avoir compris !!! Après je peux afficher ce que je veux dans ma page du serveur 2 j'imagine ça reste du php simple ..
Merci merci de ton énorme aide !
Du coup dans mon formulaire j'ai bien method=POST et action=(la page serveur1 avec le code curl) c'est ça ?
Oui car tu envoies les données via curl au serveur 2, ça reste du POST mais par curl car tu veux recevoir une réponse du serveur 2 :)
Oubli pas de mettre ce poste en résolu
Bonjour,
Je me permet une dernière question . Tout a parfaitement fonctionné : l'envoie de mail, la récupération des données, un GRAND merci !
Par contre :
J'aimerais pouvoir sur une page totalement à part (sur le deuxième serveur ) afficher les données que j'ai récupérer du serveur 1 pour pouvoir les ajouter manuellement ou non dans une base de donnée etc .. Comment puis-je faire ça ?
Ton serveur 2 as déjà récupérer les données pour les enregistrer en base de données non ?
Tu les affiches tout simplement ta table en base ^^
Pas bête .. Je ne réfléchis pas parfois !
Ca ne pose pas de problème si dans le fichier de traitement je fais l'envoie de mail ET l'envoie en base de donnée ? Les deux vont bien marcher ?