отправка запроса json через php+curl

389
22 марта 2017, 19:07

Есть необходимость отправить следующий хук:

 POST /hooks/fa63636975788d7/execute HTTP/1.1
 Host: some.host
 Content-Type: application/json
{
"name": "Тестовая задача",
"desc": "Данная задача создана через Hook и может быть удалена"
}

Накидал скрипт следующим образом :

<?php
$data='{"name": "Тестовая задача","desc": "Данная задача создана через Hook и может быть удалена"}';
$json=json_encode($data);
$ch = curl_init('https://some.host/hooks/fa63636975788d7cd80/execute'); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_setopt($ch,CURLOPT_PROTOCOLS,CURLPROTO_HTTPS);
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
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);
curl_exec($ch);
curl_close($ch);
?>

Доступа к логам сервера some.host нет, скрипт отрабатывает но на сервере заявка не падает, сам впервые использую cURL, подскажите рабочий ли этот вариант ?

Answer 1

На первый взгляд ваш код рабочий, однако при запросе могут возникнуть ошибки которые надо выловить, попробуйте в вашем коде удалить curl_exec и curl_close и добавить данный кусок завершения CURL :

$Result = curl_exec($ch);
  $CURL_Error = curl_errno($ch);
  if ($CURL_Error > 0)
  {
    echo 'cURL Error: --'.$CURL_Error.'--<br>';
    $RetStr = false;
  }
  else
  {
    $RetStr = $Result;
  }
  curl_close($ch);
Answer 2

Первый момент - Вы делаете json_encode уже строки json (см. пример), и возможно сервер такой json не понимает.

Второй момент - Вы шлете и $data (curl_setopt($ch,CURLOPT_POSTFIELDS,$data);) и $json (curl_setopt($ch,CURLOPT_POSTFIELDS,$json);)

Попробуйте такой вариант

$json='{"name": "Test Case","desc": "This is test task"}';
$ch = curl_init('https://some.host/hooks/fa63636975788d7cd80/execute'); 
curl_setopt($ch, CURLOPT_POST, true); //переключаем запрос в POST
curl_setopt($ch, CURLOPT_POSTFIELDS,$json); //Это POST данные
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //Отключим проверку сертификата https
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //из той же оперы
curl_exec($ch);
curl_close($ch);
READ ALSO
Как объединить два массива и сделать отображения по порядку

Как объединить два массива и сделать отображения по порядку

Пытаюсь объединить два массива первый массив

271
Можно это перевести?

Можно это перевести?

Можно это перевести с php на html?

310
Как добавлять в корзину товары с помощью ajax?

Как добавлять в корзину товары с помощью ajax?

Подскажите, как настроить добавление товара в корзину с помощью ajax? В магазине на основе плагина woocommerce используются стандартные шаблоны...

316