<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"postvar1=value1&postvar2=value2&postvar3=value3");
// In real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
// Further processing ...
if ($server_output == "OK") { ... } else { ... }
?>
http_build_query()
pour gérer les paramètres; il suffit de passer le tableau àCURLOPT_POSTFIELDS
est suffisant.CURLOPT_POSTFIELDS
est un tableau, l'en-Content-Type
tête sera défini sur aumultipart/form-data
lieu deapplication/x-www-form-urlencoded
. php.net/manual/en/function.curl-setopt.phptrue
au lieu de1
pourCURLOPT_POST
.De procédure
Orienté objet
Usage
Note latérale ici: il serait préférable de créer une sorte d'interface appelée
AdapterInterface
par exemple avec lagetResponse()
méthode et de laisser la classe ci-dessus l'implémenter. Ensuite, vous pouvez toujours échanger cette implémentation avec un autre adaptateur de votre choix, sans aucun effet secondaire sur votre application.Utilisation de HTTPS / chiffrement du trafic
Habituellement, il y a un problème avec cURL en PHP sous le système d'exploitation Windows. En essayant de vous connecter à un point de terminaison protégé par https, vous obtiendrez une erreur vous le disant
certificate verify failed
.Ce que la plupart des gens font ici, c'est de dire à la bibliothèque cURL d'ignorer simplement les erreurs de certificat et de continuer (
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
). Comme cela fera fonctionner votre code, vous introduisez un énorme trou de sécurité et permettez aux utilisateurs malveillants d'effectuer diverses attaques sur votre application comme l' attaque Man In The Middle ou autre.Ne fais jamais ça. Au lieu de cela, il vous suffit de modifier votre
php.ini
et de dire à PHP où se trouve votreCA Certificate
fichier pour le laisser vérifier correctement les certificats:Les dernières
cacert.pem
peuvent être téléchargées sur Internet ou extraites de votre navigateur préféré . Lorsque vous modifiezphp.ini
des paramètres associés, n'oubliez pas de redémarrer votre serveur Web.la source
Un exemple en direct d'utilisation de php curl_exec pour faire un post HTTP:
Mettez ceci dans un fichier appelé foobar.php:
Ensuite, exécutez-le avec la commande
php foobar.php
, il vide ce type de sortie à l'écran:Vous avez donc effectué un POST PHP sur www.google.com et lui avez envoyé des données.
Si le serveur avait été programmé pour lire les variables de post, il pourrait décider de faire quelque chose de différent en fonction de cela.
la source
$postvars .= $key . $value;
devrait$postvars .= $key . $value ."&";
ou non?$fields
tableau et il produira une chaîne de requête.curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
http_build_query
comme:curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
Il est facilement accessible avec:
la source
Curl Post + Gestion des erreurs + Définir les en-têtes [merci à @ mantas-d]:
la source
la source
curl_close
intérieur d'unfinally
bloc.Si le formulaire utilise des redirections, une authentification, des cookies, SSL (https) ou autre chose qu'un script totalement ouvert qui attend des variables POST, vous allez commencer à grincer des dents très rapidement. Jetez un œil à Snoopy , qui fait exactement ce que vous avez en tête tout en supprimant la nécessité de configurer une grande partie des frais généraux.
la source
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Une réponse plus simple SI vous transmettez des informations à votre propre site Web est d'utiliser une variable SESSION. Commencez la page php avec:
Si, à un moment donné, vous souhaitez générer des informations en PHP et passer à la page suivante de la session, au lieu d'utiliser une variable POST, affectez-la à une variable SESSION. Exemple:
Ensuite, sur la page suivante, vous référencez simplement cette variable SESSION. REMARQUE: après l'avoir utilisé, assurez-vous de le détruire, afin qu'il ne persiste pas après son utilisation:
la source
Voici du code standard pour PHP + curl http://www.webbotsspidersscreenscrapers.com/DSP_download.php
inclure dans ces bibliothèques simplifiera le développement
la source
Si vous essayez de vous connecter sur le site avec des cookies.
Ce code:
Peut ne pas fonctionner si vous essayez de vous connecter, car de nombreux sites renvoient le statut 200, mais la publication échoue.
Un moyen facile de vérifier si la connexion est réussie est de vérifier s'il réinstalle les cookies. Si en sortie ont une chaîne Set-Cookies, cela signifie que les publications ne réussissent pas et que la nouvelle session démarre.
La publication peut également réussir, mais le statut peut être redirigé à la place 200.
Pour être sûr que le message est réussi, essayez ceci:
Suivez l'emplacement après le message, il ira donc à la page vers laquelle le message est redirigé:
Et puis vérifiez si de nouveaux cookies existent dans la demande:
la source
Exemples d'envoi de formulaire et de données brutes :
la source