$ _POST değerlerini cURL ile iletme


Yanıtlar:


168

İyi çalışmalı.

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

Burada, CURLOPT_POSTHTTP POST'u açan ve CURLOPT_POSTFIELDSgönderilecek gönderi verilerimizi içeren iki seçeneğimiz var . Bu, verileri e- POST <form>postalara göndermek için kullanılabilir .


curl_setopt($handle, CURLOPT_POSTFIELDS, $data);$ Data'yı iki formatta aldığına ve bunun post verilerinin nasıl kodlanacağını belirlediğine dikkat etmek önemlidir .

  1. $dataas an array(): Veriler multipart/form-data, sunucu tarafından her zaman kabul edilmeyen şekilde gönderilecektir .

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
    
  2. $dataurl ile kodlanmış dize olarak: Veriler, application/x-www-form-urlencodedgönderilen html form verileri için varsayılan kodlama olan olarak gönderilecektir.

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

Umarım bu, başkalarının zamandan tasarruf etmesine yardımcı olur.

Görmek:


Notunuz beni en az bir saat hata ayıklamadan kurtardı. Teşekkürler.
Vivek Kumar

30

Ross, olağan parametre / değer biçimini bir url'ye göndermek için doğru fikre sahip .

Kısa bir süre önce, herhangi bir parametre çifti olmadan bazı XML'leri Content-Type "text / xml" olarak POST yapmam gereken bir durumla karşılaştım, işte bunu nasıl yapacağınız:

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

Benim durumumda, bazı değerleri HTTP yanıt başlığından ayrıştırmam gerekti, bu yüzden mutlaka CURLOPT_RETURNTRANSFERveya ayarlamanıza gerek olmayabilir CURLOPT_HEADER.


1
Posterin istediği bu değil, ama tam olarak aradığım şey oluyor, teşekkürler!
davr

Başka birinin bunu yararlı bulmasına sevindim.
Mark Biek

1
sizin "curl_setopt ($ httpRequest, CURLOPT_HTTPHEADER, array (" Content-Type: text / xml "));" zaten birkaç saatimi alan bir şeyi çözdüm! çok teşekkürler :)
Alexei Tenitski

Merhaba Mark, vaktin varsa lütfen bana yardım eder misin? .. Lütfen. burayı tıklayın
jayAnn

Bizimkini, xml verilerimin urlencoded olarak gönderildiğinde neden kabul edilmediğini anlamaya çalışarak geçirdik. İçerik Türü ve hiçbir urlencode beni kurtardı. Teşekkürler.
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

CURL kullanmanın başka bir basit PHP örneği:

<?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
?>

Burada bulunan örnek: http://devzone.co.in/post-data-using-curl-in-php-a-simple-example/

Kullanmak yerine curl_setoptkullanabilirsiniz curl_setopt_array.

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


Teşekkür ederim!! - Kodunuz curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Define what you want to postaradığımı bana sağladı :)
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
Bu cevabı biraz daha açabilir misin? Birkaç satır kod cevap vermez.
Rich Benner

1) URL'nizi belirtin 2) Parametre dizisi oluşturun 3)
Curl'yi başlatın

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.