98 votes

Passage de valeurs $_POST avec cURL

Comment passe-t-on $_POST à une page en utilisant cURL ?

172voto

Ross Points 19037

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.

  1. $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);
  2. $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 :

0 votes

Votre note m'a épargné au moins une heure de débogage. Merci.

31voto

Mark Biek Points 41769

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 .

1 votes

Ce n'est pas ce que l'affiche demande, mais il se trouve que c'est exactement ce que je cherchais, merci !

0 votes

Je suis content que quelqu'un d'autre ait trouvé ça utile.

1 votes

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 :)

4voto

Julian Points 548

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 .

http://php.net/manual/en/function.curl-setopt-array.php

0 votes

Merci ! - Votre code curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Define what you want to post m'a fourni ce que je cherchais :)

3voto

Andy Griffin Points 21

Vérifiez cette page qui contient un exemple de la façon de procéder.

2 votes

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.

2voto

Tolo Palmer Points 132

Consultez le cUrl page de documentation PHP . Il vous aidera bien plus que de simples exemples de scripts.

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