Web

Передача значений массива $_POST с помощью cURL

Как передать $_POST значения на страницу с помощью cURL?

 

Ответ 1

Вот пример работающего кода:

$data = array('name' => 'Ross', 'php_master' => true);

// Вы можете применить POST файл, используя префикс @ (для полей <input type="file">)

$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>. Важно отметить, что curl_setopt($handle, CURLOPT_POSTFIELDS, $data); принимает $data в двух форматах, и это определяет, как будут закодированы данные сообщения.

  1. $data в виде массива(): Данные будут отправлены в формате multipart/form-data, который не всегда принимается сервером.

$data = array('name' => 'Ross', 'php_master' => true);

curl_setopt($handle, CURLOPT_POSTFIELDS, $data);

  1. $data как строка в кодировке url: Данные будут отправлены в формате application/x-www-form-urlencoded, который является кодировкой по умолчанию для данных отправленной html-формы.

$data = array('name' => 'Ross', 'php_master' => true);

curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));

Надеюсь, это поможет другим сэкономить время.

Смотри:

  • curl_init

  • curl_setopt

 

Ответ 2

Недавно я столкнулся с ситуацией, когда мне нужно было отправить 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.

 

Ответ 3

Еще один простой PHP пример использования cURL:

<?php

    $ch = curl_init();                    // инициализация cURL

    $url = "http://www.somesite.com/curl_example.php"; // Где вы хотите разместить данные

    curl_setopt($ch, CURLOPT_URL,$url);

    curl_setopt($ch, CURLOPT_POST, true);  // Сообщите cURL, что вы хотите что-то опубликовать

    curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=value1&var2=value2&var_n=value_n"); // Определите, что вы хотите опубликовать

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Возврат вывода в строковом формате

    $output = curl_exec ($ch); // Выполнение

    curl_close ($ch); //  Закрыть хэндл сURL

    var_dump($output); // Отобразить результат

?>

 Вместо использования curl_setopt вы можете использовать curl_setopt_array.

См. в документации:

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


Ответ 4

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

 

Ответ 5

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

    }

    // Если требуется какая-либо HTTP-аутентификация.

    $username = 'http-auth-username';

    $password = 'http-auth-password';

    $requestType = 'POST'; // This can be PUT or POST

    // Это пример массива. Вы можете использовать $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'

        )

    );

    // Вы можете установить свои данные поста

    $postData = http_build_query($arrPostData); // Необработанный массив PHP

    $postData = json_encode($arrPostData); // Используйте это только при запросе данных в формате JSON.

    $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', // Используйте это только при запросе данных JSON

        ),

        // Если требуется HTTP-аутентификация, используйте следующие строки.

        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,

        CURLOPT_USERPWD  => $username. ':' . $password

    ));

    // $mixResponse содержит ответ вашего сервера.

 

 

Схожие статьи

PHP конференция — способ получить новые знания и вдохновение
Web

PHP конференция — способ получить новые знания и вдохновение

Web

Как создать сервер веб-сокетов на PHP

Web

Отправка HTML по электронной почте через PHP

Самый быстрый DNS-сервер России: сравниваем и выбираем лучший из них
Web

Самый быстрый DNS-сервер России: сравниваем и выбираем лучший из них