Comment passe-t-on $_POST
à une page en utilisant cURL
?
Votre note m'a épargné au moins une heure de débogage. Merci.
Cela devrait fonctionner correctement.
$data = array('name' => 'Ross', 'php_master' => true);
// You can POST a file by prefixing with an @ (for <input type="file"> fields)
$data['file'] = '@/home/user/world.jpg';
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
curl_exec($handle);
curl_close($handle)
Nous avons deux options ici, CURLOPT_POST
qui active HTTP POST, et CURLOPT_POSTFIELDS
qui contient un tableau de nos données postales à soumettre. Ceci peut être utilisé pour soumettre des données à POST
<form>
s.
Il est important de noter que curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
prend les $data dans deux formats, et que cela détermine comment les données du message seront encodées.
$data
comme un array()
: Les données seront envoyées en tant que multipart/form-data
ce qui n'est pas toujours accepté par le serveur.
$data = array('name' => 'Ross', 'php_master' => true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
$data
en tant que chaîne codée url : Les données seront envoyées en tant que application/x-www-form-urlencoded
qui est l'encodage par défaut des données du formulaire html soumis.
$data = array('name' => 'Ross', 'php_master' => true);
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));
J'espère que cela aidera d'autres personnes à gagner du temps.
Voir :
Ross a la bonne idée pour envoyer le format habituel paramètre/valeur à une url.
J'ai récemment rencontré une situation où je devais envoyer un fichier XML en tant que Content-Type "text/xml" sans aucune paire de paramètres. Voici comment procéder :
$xml = '<?xml version="1.0"?><stuff><child>foo</child><child>bar</child></stuff>';
$httpRequest = curl_init();
curl_setopt($httpRequest, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($httpRequest, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($httpRequest, CURLOPT_POST, 1);
curl_setopt($httpRequest, CURLOPT_HEADER, 1);
curl_setopt($httpRequest, CURLOPT_URL, $url);
curl_setopt($httpRequest, CURLOPT_POSTFIELDS, $xml);
$returnHeader = curl_exec($httpRequest);
curl_close($httpRequest);
Dans mon cas, j'avais besoin d'analyser certaines valeurs à partir de l'en-tête de la réponse HTTP ; vous n'aurez donc pas nécessairement besoin de définir le paramètre CURLOPT_RETURNTRANSFER
ou CURLOPT_HEADER
.
Ce n'est pas ce que l'affiche demande, mais il se trouve que c'est exactement ce que je cherchais, merci !
Votre "curl_setopt($httpRequest, CURLOPT_HTTPHEADER, array("Content-Type : text/xml")) ;" a résolu quelque chose qui m'a pris quelques heures déjà ! merci beaucoup :)
Un autre exemple simple d'utilisation de cURL en PHP :
<?php
$ch = curl_init(); // Initiate cURL
$url = "http://www.somesite.com/curl_example.php"; // Where you want to post data
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, true); // Tell cURL you want to post something
curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Define what you want to post
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return the output in string format
$output = curl_exec ($ch); // Execute
curl_close ($ch); // Close cURL handle
var_dump($output); // Show output
?>
Exemple trouvé ici : http://devzone.co.in/post-data-using-curl-in-php-a-simple-example/
Au lieu d'utiliser curl_setopt
vous pouvez utiliser curl_setopt_array
.
Vérifiez cette page qui contient un exemple de la façon de procéder.
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence.
Consultez le cUrl page de documentation PHP . Il vous aidera bien plus que de simples exemples de scripts.
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.