пятница, 23 ноября 2012 г.

Формирование и отправка JSON данных методом POST средствами PHP cURL

Я знаю ещё пару умных аббревиатур, но в этой заметке мы объединим только 4: JSON, POST, PHP и cURL.
Задача
При парсинге данных с одного ресурса в Сети возникла необходимость отправки запроса в формате JSON методом POST. Проект написан на PHP и использует библиотеку cURL. Так в голову пришла идея заставить всё это работать вместе.

Решение
Решение простое, но явно не описано в документации PHP. Нужно выполнить условия:
  • сформировать правильный запрос в формате JSON;
  • сообщить серверу, что отсылаем ему JSON запрос, установив заголовок
    Content-Type: application/json;
  • сообщить cURL, что в запросе POST отправляем не стандартно сформированные данные (key1=value1&key2=value2&...), а JSON.
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
PHP код, реализующий вышеописанное, имеет вид:
//Формируем JSON
$request_data = array('type' => 'reqColor', 'value' => '#aa00cc');
$json = json_encode($request_data);

//Настраиваем cURL
$ch = curl_init('http://sample.com/data.php');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Получаем данные
$response = curl_exec($ch);
Результат
Поставленная задача решена.

PS. Про тоже на английском читать здесь.

3 комментария:

  1. Спасибо вам.
    Столько сил потратил чтобы найти как отправить правильно...

    ОтветитьУдалить
  2. Спасибо Вам огромное! Работает! Целый интернет за 2 часа перерыл в поиске нужной информации. ТОЛЬКО У ВАС ОН ЗАРАБОТАЛ! СПАСИБО!

    ОтветитьУдалить