Meneruskan nilai $ _POST dengan cURL

95

Bagaimana Anda mengirimkan $_POSTnilai ke halaman menggunakan cURL?

Scott Gottreu
sumber

Jawaban:

168

Seharusnya bekerja dengan baik.

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

Kami memiliki dua opsi di sini, CURLOPT_POSTyang mengaktifkan HTTP POST, dan CURLOPT_POSTFIELDSyang berisi larik data posting kami untuk dikirim. Ini dapat digunakan untuk mengirimkan data ke POST <form>s.


Penting untuk dicatat bahwa curl_setopt($handle, CURLOPT_POSTFIELDS, $data);mengambil $ data dalam dua format, dan ini menentukan bagaimana data posting akan dikodekan.

  1. $datasebagai array(): Data akan dikirim karena multipart/form-datatidak selalu diterima oleh server.

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
  2. $datasebagai string yang dikodekan url: Data akan dikirim sebagai application/x-www-form-urlencoded, yang merupakan pengkodean default untuk data formulir html yang dikirimkan.

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

Saya harap ini akan membantu orang lain menghemat waktu mereka.

Lihat:

Ross
sumber
Catatan Anda menyelamatkan saya setidaknya satu jam debugging. Terima kasih.
Vivek Kumar
30

Ross punya ide yang tepat untuk mem-POSTING format parameter / nilai biasa ke url.

Saya baru-baru ini mengalami situasi di mana saya perlu POST beberapa XML sebagai Content-Type "text / xml" tanpa pasangan parameter apa pun, jadi inilah cara Anda melakukannya:

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

Dalam kasus saya, saya perlu mengurai beberapa nilai dari header respons HTTP sehingga Anda mungkin tidak perlu menyetel CURLOPT_RETURNTRANSFERatau CURLOPT_HEADER.

Mark Biek
sumber
1
Ini bukan yang diminta poster, tetapi kebetulan persis seperti yang saya cari, terima kasih!
davr
Saya senang orang lain merasa terbantu.
Mark Biek
1
"curl_setopt ($ httpRequest, CURLOPT_HTTPHEADER, array (" Content-Type: text / xml "));" memecahkan sesuatu yang sudah memakan waktu beberapa jam! terima kasih banyak :)
Alexei Tenitski
Hai Mark, jika Anda punya waktu, bisakah Anda membantu saya? .. Tolong. klik di sini
jayAnn
Menghabiskan waktu mencoba mencari tahu mengapa data xml saya tidak diterima ketika dikirim sebagai urlencoded. Content-Type dan no urlencode menyelamatkan saya. Terima kasih.
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
sumber
3

Contoh PHP sederhana lainnya menggunakan 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
?>

Contoh ditemukan di sini: http://devzone.co.in/post-data-using-curl-in-php-a-simple-example/

Alih-alih menggunakan, curl_setoptAnda bisa menggunakan curl_setopt_array.

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

Julian
sumber
Terima kasih!! - Kode Anda curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Define what you want to postmemberi saya apa yang saya cari :)
asugrue15
2

Lihat halaman ini yang memiliki contoh bagaimana melakukannya.

Andy Griffin
sumber
2
Meskipun ini secara teoritis dapat menjawab pertanyaan, akan lebih baik jika menyertakan bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
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
sumber
1
Bisakah Anda memperluas jawaban ini? Beberapa baris kode bukanlah jawaban.
Rich Benner
1) Tentukan url Anda 2) Buat berbagai parameter 3) Inisialisasi curl 4) set Opsi yang diperlukan dari curl 5) Jalankan Curl 6) Tutup 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
sumber