Passer des valeurs $ _POST avec cURL


Réponses:


167

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_POSTqui active HTTP POST et CURLOPT_POSTFIELDSqui contient un tableau de nos données de publication à soumettre. Cela peut être utilisé pour soumettre des données à l' POST <form>art.


Il est important de noter que curl_setopt($handle, CURLOPT_POSTFIELDS, $data);prend les données $ dans deux formats, et que cela détermine comment les données de publication seront encodées.

  1. $dataen tant que array(): Les données seront envoyées comme multipart/form-datace qui n'est pas toujours accepté par le serveur.

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
  2. $dataas url encoded string: Les données seront envoyées en tant que application/x-www-form-urlencoded, qui est l'encodage par défaut pour les données de formulaire HTML soumises.

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));

J'espère que cela aidera les autres à gagner du temps.

Voir:


Votre note m'a sauvé au moins une heure de débogage. Merci.
Vivek Kumar le

30

Ross a la bonne idée pour POSTER le format de paramètre / valeur habituel dans une URL.

Je suis récemment tombé sur une situation où je devais POSTER du XML en tant que Content-Type «text / xml» sans aucune paire de paramètres, alors 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 de l'en-tête de réponse HTTP afin que vous n'ayez pas nécessairement besoin de définir CURLOPT_RETURNTRANSFERou CURLOPT_HEADER.


1
Ce n'est pas ce que demande l'affiche, mais c'est exactement ce que je cherchais, merci!
davr

Je suis content que quelqu'un d'autre l'ait trouvé utile.
Mark Biek le

1
votre "curl_setopt ($ httpRequest, CURLOPT_HTTPHEADER, array (" Content-Type: text / xml "));" résolu quelque chose qui m'a déjà pris quelques heures! merci beaucoup :)
Alexei Tenitski

Salut Mark, si vous avez le temps, pourriez-vous m'aider s'il vous plaît? .. S'il vous plaît. cliquez ici
jayAnn

Nous avons passé le nôtre à essayer de comprendre pourquoi mes données XML n'étaient pas acceptées lorsqu'elles étaient envoyées comme urlencodées. Le Content-Type et aucun urlencode m'ont sauvé. Merci.
Samuel

3
$query_string = "";

if ($_POST) {
    $kv = array();
    foreach ($_POST as $key => $value) {
        $kv[] = stripslashes($key) . "=" . stripslashes($value);
    }
    $query_string = join("&", $kv);
}

if (!function_exists('curl_init')){
    die('Sorry cURL is not installed!');
}

$url = 'https://www.abcd.com/servlet/';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($kv));
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);

curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

$result = curl_exec($ch);

curl_close($ch);

3

Un autre exemple PHP simple d'utilisation de cURL:

<?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_setoptvous pouvez utilisercurl_setopt_array .

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


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



1
$url='Your url'; // Specify your url
$data= array('parameterkey1'=>value,'parameterkey2'=>value); // Add parameters in key value
$ch = curl_init(); // Initialize cURL
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);

1
Pourriez-vous développer cette réponse? Quelques lignes de code ne font pas de réponse.
Rich Benner

1) Spécifiez votre URL 2) Créez un tableau de paramètres 3) Initialisez curl 4) Définissez les options requises de curl 5) Exécutez Curl 6) Fermez Curl
Aniket B

0
<?php
    function executeCurl($arrOptions) {

        $mixCH = curl_init();

        foreach ($arrOptions as $strCurlOpt => $mixCurlOptValue) {
            curl_setopt($mixCH, $strCurlOpt, $mixCurlOptValue);
        }

        $mixResponse = curl_exec($mixCH);
        curl_close($mixCH);
        return $mixResponse;
    }

    // If any HTTP authentication is needed.
    $username = 'http-auth-username';
    $password = 'http-auth-password';

    $requestType = 'POST'; // This can be PUT or POST

    // This is a sample array. You can use $arrPostData = $_POST
    $arrPostData = array(
        'key1'  => 'value-1-for-k1y-1',
        'key2'  => 'value-2-for-key-2',
        'key3'  => array(
                'key31'   => 'value-for-key-3-1',
                'key32'   => array(
                    'key321' => 'value-for-key321'
                )
        ),
        'key4'  => array(
            'key'   => 'value'
        )
    );

    // You can set your post data
    $postData = http_build_query($arrPostData); // Raw PHP array

    $postData = json_encode($arrPostData); // Only USE this when request JSON data.

    $mixResponse = executeCurl(array(
        CURLOPT_URL => 'http://whatever-your-request-url.com/xyz/yii',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPGET => true,
        CURLOPT_VERBOSE => true,
        CURLOPT_AUTOREFERER => true,
        CURLOPT_CUSTOMREQUEST => $requestType,
        CURLOPT_POSTFIELDS  => $postData,
        CURLOPT_HTTPHEADER  => array(
            "X-HTTP-Method-Override: " . $requestType,
            'Content-Type: application/json', // Only USE this when requesting JSON data
        ),

        // If HTTP authentication is required, use the below lines.
        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
        CURLOPT_USERPWD  => $username. ':' . $password
    ));

    // $mixResponse contains your server response.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.