Передача значень $ _POST за допомогою cURL


Відповіді:


167

Повинна працювати нормально.

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

У нас тут є два варіанти, CURLOPT_POSTякий включає HTTP POST і CURLOPT_POSTFIELDSякий містить масив наших даних для публікації, які потрібно подати. Це може бути використано для надсилання даних до POST <form>s.


Важливо зазначити, що curl_setopt($handle, CURLOPT_POSTFIELDS, $data);дані $ приймаються у двох форматах, і це визначає спосіб кодування даних пошти.

  1. $dataяк array(): Дані будуть надіслані як такі, multipart/form-dataщо не завжди приймаються сервером.

    $data = array('name' => 'Ross', 'php_master' => true);
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
  2. $dataяк рядок, закодований за адресою url: Дані надсилатимуться як application/x-www-form-urlencoded, що є кодуванням за замовчуванням для поданих даних форми HTML.

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

Сподіваюсь, це допоможе іншим заощадити свій час.

Побачити:


Ваша нотатка заощадила мені щонайменше годину налагодження. Дякую.
Вівек Кумар

30

Росс має правильну ідею для розміщення звичайного формату параметра / значення на URL-адресу.

Нещодавно я зіткнувся з ситуацією, коли мені потрібно було розмістити якийсь XML як Content-Type "text / xml" без будь-яких пар параметрів, ось ось як це зробити:

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

У моєму випадку мені потрібно було проаналізувати деякі значення з заголовка відповіді HTTP, тому, можливо, вам не потрібно буде встановлювати CURLOPT_RETURNTRANSFERабо CURLOPT_HEADER.


1
Це не те, що просить плакат, але це просто саме те, що я шукав, дякую!
davr

Я радий, що хтось інший визнав це корисним.
Марк Бік

1
ваш "curl_setopt ($ httpRequest, CURLOPT_HTTPHEADER, масив (" Тип вмісту: text / xml "));" вирішив щось, що зайняло у мене вже пару годин! велике спасибі :)
Олексій Теницький

Привіт Марк, якщо ти маєш час, ти можеш допомогти мені? .. Будь ласка. натисніть тут
jayAnn

Провів наших, намагаючись зрозуміти, чому мої дані xml не були прийняті при надсиланні як urlencoded. Тип вмісту та жоден urlencode мене не врятували. Дякую.
Самуїл

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

Ще один простий приклад PHP використання 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
?>

Приклад можна знайти тут: http://devzone.co.in/post-data-using-curl-in-php-a-simple-example/

Замість використання curl_setoptви можете використовуватиcurl_setopt_array .

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


Дякую!! - Ваш код curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Define what you want to postнадав мені те, що я шукав :)
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
Не могли б ви розширити цю відповідь? Кілька рядків коду не дають відповіді.
Річ Беннер

1) Вкажіть свою URL-адресу 2) Створіть масив параметрів 3) Ініціалізуйте curl 4) встановіть необхідні параметри curl 5) Виконайте Curl 6) Закрийте 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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.