2013-07-16 4 views
0

Я в процессе создания API, но столкнулся с некоторыми проблемами при тестировании cURL.Проблемы с заголовком cURL при публикации JSON

Мой код выглядит следующим образом:

$people = array(array('name' => urlencode('casper'), 
         'shoesize' => urlencode(41) 
        ), 
       array('name' => urlencode('charlotte'), 
         'activated' => urlencode(1) 
        ) 
     ); 

$data = http_build_query(array('data' => json_encode($people))); 
$url = '...'; 

$ch = curl_init($url); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json', 
    'Content-Type: application/json', 
    'Connection: Keep-Alive' 
)); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($ch); 

curl_close($ch); 

return $result; 

Способ по URL конечной точки просто возвращает $ _POST [ 'данные'].

Это работает до тех пор, пока я не установил свои заголовки в cURL. Без них данные передаются без проблем.

+0

Что именно проблема? Вы упомянули, что он отлично работает без заголовков, но что с ними происходит? –

+0

@JohnVanDeWeghe OP использует данные json, но не правильно отправляет json-данные. см. мой ответ ниже – alwaysLearn

+0

Проблема в том, что мне нужны типы заголовков для правильной обработки запроса. Но при отправке данных в cURL отправка данных не производится. – Stromgren

ответ

0

Если вы используете json заголовок затем отправить данные JSon заменить

$data = http_build_query(array('data' => json_encode($people))); 

с

$data = json_encode($people); 

и принести его в целевой файл с помощью fopen('php://input','r');

или либо не посылаем заголовок на всех ,

вы можете увидеть, может blog

+0

Мне нужны заголовки, так как мой API должен иметь возможность обрабатывать разные форматы данных. Спасибо за ответ. Я не понимаю, почему мне придется использовать fopen? – Stromgren

+0

Вы можете получить желаемый результат? Я объясню вам, почему вам это нужно – alwaysLearn

+0

Запрос получить, когда я делаю так. Но я не могу получить результат. Глядя в $ _POST, я получаю пустой массив. Не уверен, как на самом деле выводить с помощью fopen или превращать его в массив PHP. Как если бы я мог просто json_decode данных. – Stromgren

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