2008-08-26 7 views
87

Comment transmettre les valeurs $_POST à une page en utilisant cURL?

Répondre

159

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, CURLOPT_POST qui tourne HTTP POST sur et CURLOPT_POSTFIELDS qui contient un tableau de nos données de poste à soumettre. Cela 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 données de $ en deux formats, et que cela détermine comment les données de poste seront codées.

  1. $data comme array(): Les données seront envoyées sous forme multipart/form-data qui est pas toujours acceptée par le serveur.

    $data = array('name' => 'Ross', 'php_master' => true); 
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data); 
    
  2. $data sous forme de chaîne codée url: Les données seront envoyées sous forme application/x-www-form-urlencoded, qui est l'encodage par défaut pour les données de 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 économiser leur temps.

Voir:

2

Check out this page qui a un exemple de la façon de le faire.

+2

Bien que cela puisse théoriquement répondre à la question, [il serait préférable] (http://meta.stackexchange.com/q/8259) pour inclure les éléments essentiels de la réponse ici, et fournir le lien pour référence. – Nanne

28

Ross has the right idea pour POSTing le format de paramètre/valeur habituel à un URL.

J'ai récemment couru dans une situation où je devais mettre un peu XML comme Content-Type « text/xml » sans paires de paramètres alors voici comment vous le faites:

$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, il me fallait pour analyser certaines valeurs de l'en-tête de réponse HTTP, vous n'avez donc pas nécessairement besoin de définir CURLOPT_RETURNTRANSFER ou CURLOPT_HEADER.

+1

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

+0

Je suis content que quelqu'un d'autre l'ait trouvé utile. –

+1

votre "curl_setopt ($ httpRequête, CURLOPT_HTTPHEADER, tableau (" Content-Type: text/xml "));" résolu quelque chose qui m'a pris quelques heures déjà! merci beaucoup :) –

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); 
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. 
3

Un autre exemple simple PHP d'utiliser 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_setopt vous pouvez utiliser curl_setopt_array.

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

+0

Merci! - Votre code 'curl_setopt ($ ch, CURLOPT_POSTFIELDS," var1 = valeur1 & var2 = valeur2 & var_n = valeur_n "); // Définir ce que vous voulez publier »m'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. –

+0

1) Spécifiez votre url –

+0

1) Spécifiez votre url 2) Créez une matrice de paramètres 3) Initialisez curl 4) définissez Options de curl requises 5) Exécutez curl 6) Fermer Curl –

Questions connexes