Übergeben von $ _POST-Werten mit cURL

94

Wie übergeben Sie $_POSTWerte mit an eine Seite cURL?

Scott Gottreu
quelle

Antworten:

167

Sollte gut funktionieren.

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

Wir haben hier zwei Optionen, CURLOPT_POSTdie den HTTP-POST aktivieren und CURLOPT_POSTFIELDSein Array unserer zu übermittelnden Post-Daten enthalten. Dies kann verwendet werden, um Daten an POST <form>s zu senden .


Es ist wichtig zu beachten, dass curl_setopt($handle, CURLOPT_POSTFIELDS, $data);die $ -Daten in zwei Formaten verwendet werden und dass dies bestimmt, wie die Post-Daten codiert werden.

  1. $dataals array(): Die Daten werden so gesendet, wie multipart/form-datasie vom Server nicht immer akzeptiert werden.

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
  2. $dataals URL-codierte Zeichenfolge: Die Daten werden als gesendet. Dies application/x-www-form-urlencodedist die Standardcodierung für übermittelte HTML-Formulardaten.

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

Ich hoffe, dies wird anderen helfen, ihre Zeit zu sparen.

Sehen:

Ross
quelle
Ihre Notiz hat mir mindestens eine Stunde Debugging erspart. Vielen Dank.
Vivek Kumar
30

Ross hat die richtige Idee, das übliche Parameter- / Wertformat an eine URL zu senden.

Ich bin kürzlich auf eine Situation gestoßen, in der ich XML als Inhaltstyp "text / xml" ohne Parameterpaare POSTEN musste. So geht's:

$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);

In meinem Fall musste ich einige Werte aus dem HTTP-Antwortheader analysieren, damit Sie möglicherweise nicht unbedingt CURLOPT_RETURNTRANSFERoder festlegen müssen CURLOPT_HEADER.

Mark Biek
quelle
1
Dies ist nicht das, was das Poster verlangt, aber es ist genau das, wonach ich gesucht habe, danke!
Davr
Ich bin froh, dass es jemand anderes hilfreich fand.
Mark Biek
1
Ihr "curl_setopt ($ httpRequest, CURLOPT_HTTPHEADER, Array (" Inhaltstyp: text / xml "));" löste etwas, das mich schon ein paar Stunden gekostet hat!
Vielen
Hallo Markus, wenn du Zeit hast, könntest du mir bitte helfen? .. Bitte. Klicken Sie hier
JayAnn
Wir haben versucht herauszufinden, warum meine XML-Daten beim Senden als urlencodiert nicht akzeptiert wurden. Der Inhaltstyp und kein Urlencode haben mich gerettet. Vielen Dank.
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);
Sapnandu
quelle
3

Ein weiteres einfaches PHP-Beispiel für die Verwendung von 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
?>

Beispiel hier gefunden: http://devzone.co.in/post-data-using-curl-in-php-a-simple-example/

Anstatt zu verwenden curl_setopt, können Sie verwenden curl_setopt_array.

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

julianisch
quelle
Danke dir!! - Ihr Code curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Define what you want to posthat mir das geliefert, wonach ich gesucht habe :)
asugrue15
2

Schauen Sie sich diese Seite an, die ein Beispiel dafür enthält.

Andy Griffin
quelle
2
Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Nanne
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);
Aniket B.
quelle
1
Könnten Sie diese Antwort erweitern? Ein paar Codezeilen geben keine Antwort.
Rich Benner
1) Geben Sie Ihre URL an 2) Erstellen Sie ein Array von Parametern 3) Initialisieren Sie Curl 4) Setzen Sie die erforderlichen Curl-Optionen 5) Führen Sie Curl aus 6) Schließen Sie 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.
Mohammad Faisal Islam
quelle