2016-02-18 2 views
1

Я пытаюсь разработать небольшой код API в php, который отправит запрос POST в json-формате с использованием PHP curl (со стороны клиента). И на стороне приема (на стороне сервера) я хочу разобрать запрос и обработать его. но на принимающей стороне он дает мне пустой массив в поле post. Ниже мой кодPHP API, получающий пустой запрос JSON в POST

стороне клиента:

<?php 

    $data = array("name" => "Hagrid", "age" => "36");                  
    $data_string = json_encode($data);                     
    $ch = curl_init($url);                  
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                  
    curl_setopt($ch, CURLOPT_POSTFIELDS, "xdata=".$data_string);                 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
     'Content-Type: application/json',                     
     'Content-Length: ' . strlen($data_string))                  
    );                             
    echo $result = curl_exec($ch); 

?> 

На стороне сервера:

<?php 

    print_r($_POST); 

?> 

Blockquote Array() Blockquote

Он всегда дает мне пустой массив POST на стороне сервера. Я делаю что-то неправильно или есть другой способ разобрать запрос? Прошу вас, пожалуйста.

+0

Таким образом, PHP всегда находится на сервере. PHP никогда не запускается на клиенте. –

+0

Попробуйте добавить - curl_setopt ($ ch, CURLOPT_POST, 1); // - http://stackoverflow.com/questions/2138527/php-curl-http-post-sample-code –

ответ

2

Вы можете использовать PHP: // ввод только для чтения поток, чтобы получить доступ к JSON почтовых данных вместо _POST$ как этот

<?php 
    $json = file_get_contents('php://input'); 
?> 

Это даст вам POST данные, как есть. Вы сможете декодировать его с помощью json_decode() позже.

Пример кода -

<?php 
    $json = json_decode(file_get_contents('php://input')); 
?> 
+0

Спасибо, Викеш, сейчас работает. но невозможно получить данные из POST? – Shirish

+0

@Shirish, '$ _POST' - ассоциативный массив переменных, передаваемых текущему скрипту через метод HTTP POST при использовании приложений/x-www-form-urlencoded или multipart/form-data в качестве HTTP Content-Type в запросе , Для справки см. Эту ссылку http://php.net/manual/en/reserved.variables.post.php –

+0

Если мой ответ будет полезен, тогда примите это. –

0

Вы устанавливаете неправильную длину содержимого с заголовком CURLOPT_HTTPHEADER. Ваша общая строка сообщения - strlen("xdata=".$data_string), тогда как вы используете strlen($data_string).

Кроме того, вы используете application/x-www-form-urlencoded для размещения, но упоминая тип контента сильно, как application/json

Так удалить следующий блок из кода, и вы должны быть в порядке.

// Remove it 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json', 
    'Content-Length: ' . strlen($data_string)) 
); 
Смежные вопросы