2016-11-01 2 views
0

Я пытаюсь выполнить POST некоторые данные JSON, используя cURL, но у меня проблема с настройкой заголовков.POSTING JSON данные с cURL в PHP 5

Мой текущий код выглядит так:

$ch = curl_init('https://secure.example.com'); 

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
    'Content-Type: application/json', 
    'Content-Length: ' . strlen($data_string) 
]); 

if (!$result = curl_exec($ch)) 
{ 
    echo 'Failed: ' . curl_error($ch); 
    curl_close($ch); 
    die; 
} 

curl_close($ch); 

Этот код прекрасно работает при тестировании с использованием Localhost (PHP 7). Однако на нашем веб-сервере работает только PHP 5, и поэтому опция CURLOPT_HTTPHEADER не поддерживается.

Когда я сохраняю его в своем коде, я получаю «Внутреннюю ошибку 500». Когда я его вынимаю, мой curl_exec() не запускается, и я получил сообщение об ошибке «Failed:», но без отображения curl_error().

Есть ли способ установить cURL, чтобы ожидать данных JSON без этой опции?

+0

Какая версия cURL у вас есть на веб-сервере? – apokryfos

+0

, если вы получите 500, вы загляните в журнал ошибок сервера для получения более подробной информации. –

+0

На самом деле, оператор * 'CURLOPT_HTTPHEADER' не поддерживается в PHP 5 * является ложным. – apokryfos

ответ

1

Заменить этот

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
'Content-Type: application/json', 
'Content-Length: ' . strlen($data_string) 
]); 

С

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json', 
'Content-Length: ' . strlen($data_string) 
)); 

PHP 5.4+ поддерживает новый синтаксис массива из [], но PHP 5.4 < потребности массив() был добавлен

поддержка синтаксиса Short массив в PHP 5.4 http://php.net/manual/en/migration54.new-features.php

1

Проблема, которую вы получаете, не о CURLOPT_HTTPHEADER. Это было в PHP целую вечность.

Но новый синтаксис массива [], который был добавлен в PHP 5.4.

Изменить код:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json', 
    'Content-Length: ' . strlen($data_string) 
)); 

, и он будет работать нормально.

Смежные вопросы