553 votes

PHP + curl, exemple de code HTTP POST?

Quelqu'un peut-il me montrer comment faire une boucle php avec un HTTP POST?

Je veux envoyer des données comme ceci:

 username=user1, password=passuser1, gender=1
 

Pour www.domain.com

Je m'attends à ce que la boucle renvoie une réponse comme result=OK . Y a-t-il des exemples?

942voto

miku Points 63392

Vous trouverez des exemples de php / curl ici: http://curl.haxx.se/libcurl/php/examples/ , en particulier http://curl.haxx.se/libcurl/php/examples/simplepost.html


 <?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.mysite.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 { ... }

?>
 

38voto

Eric Leschinski Points 14289

Un exemple en direct d'utilisation de php curl_exec pour faire un post HTTP:

Mettez ceci dans un fichier appelé foobar.php:

 <?php
  $ch = curl_init();
  $skipper = "luxury assault recreational vehicle";
  $fields = array( 'penguins'=>$skipper, 'bestpony'=>'rainbowdash');
  $postvars = '';
  foreach($fields as $key=>$value) {
    $postvars .= $key . "=" . $value . "&";
  }
  $url = "http://www.google.com";
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_POST, 1);                //0 for a get request
  curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
  curl_setopt($ch,CURLOPT_TIMEOUT, 20);
  $response = curl_exec($ch);
  print "curl response is:" . $response;
  curl_close ($ch);
?>
 

Ensuite, lancez-le avec la commande php foobar.php , il déverse ce type de sortie à l'écran:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Title</title>

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<body>
  A mountain of content...
</body>
</html>
 

Vous avez donc fait un POST PHP sur www.google.com et lui avez envoyé des données.

Si le serveur avait été programmé pour lire dans les variables post, il pourrait décider de faire quelque chose de différent sur cette base.

6voto

Anthony Points 14424

Si le formulaire utilise des redirections, l'authentification, les cookies, SSL (https), ou tout autre chose qu'un script totalement ouvert qui attend des variables POST, vous allez commencer à vous fouetter les dents très rapidement. Jetez un oeil à Snoopy , qui fait exactement ce que vous avez en tête tout en supprimant le besoin d'installer beaucoup de frais généraux.

3voto

Azi Points 2421

Voici quelques passe-partout de code pour PHP + curl http://www.webbotsspidersscreenscrapers.com/DSP_download.php

inclure dans cette bibliothèque simplifiera développement

3voto

user2532795 Points 11

Une simple réponse SI vous êtes de passage de l'information à votre propre site web est d'utiliser une variable de SESSION. Commencer page php avec:

session_start();

Si, à un certain point, il y a des informations que vous souhaitez générer en PHP et passer à la page suivante dans la session, au lieu d'utiliser une variable POST, l'affecter à une variable de SESSION. Exemple:

$_SESSION['message']='www.'.$_GET['school'].'.edu was not found.  Please try again.'

Puis sur la page suivante vous simplement référence à cette variable de SESSION. REMARQUE: après que vous l'utilisez, assurez-vous de le détruire, afin de ne pas persister après il est utilisé:

if (isset($_SESSION['message'])) {echo $_SESSION['message']; unset($_SESSION['message']);}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X