2015-01-16 5 views
1

У меня возникла проблема с форматированием с использованием функций curl_setopt в PHP. Я в основном пытаюсь воссоздать запрос cURL ниже, но мой код возвращает плохой запрос с сервера. Я почти уверен, что это связано с плохим форматированием, но я не могу понять, где я ошибся.PHP cURL JSON Проблемы с форматированием объектов

//This code returns the data back successfully 
    curl -H "Content-Type: application/json" -d '{"bio_ids": ["1234567"]}' http://localhost:9292/program 

<?php //This code returns a bad request from the server 
    $bio = array('bio_ids'=>'1234567'); 
    $curl = curl_init(); 
    curl_setopt_array($curl, array(
     CURLOPT_URL => 'http://localhost:9292/program', 
     CURLOPT_POST => 1, // -d 
     CURLOPT_POSTFIELDS => $bio, 
     CURLOPT_HTTPHEADER => array('Content-Type: application/json'), // -H 
    )); 
    $resp = curl_exec($curl); 
    curl_close($curl); 

    ?> 
+1

В PHP, вы не отправки JSON. Вам нужен 'json_encode ($ bio)'. Это может быть все. – Rudie

+0

О, интересно, я не понимал, что ему нужен массив в формате json-объекта. Отлично, спасибо, что решил мою проблему! –

+1

Добро пожаловать. CURL хочет строку данных. Только вы знаете, как форматировать ваши данные в строку. Иногда это JSON, иногда XML, иногда HTTP-строка запроса. – Rudie

ответ

1
<?php //This code returns a bad request from the server 
    $bio = array('bio_ids'=>'1234567'); 
    $bio = json_encode($bio); 
    $curl = curl_init(); 
    curl_setopt_array($curl, array(
     CURLOPT_URL => 'http://localhost:9292/program', 
     CURLOPT_POST => 1, // -d 
     CURLOPT_POSTFIELDS => $bio, 
     CURLOPT_HTTPHEADER => array('Content-Type: application/json'), // -H 
    )); 
    $resp = curl_exec($curl); 
    curl_close($curl); 

    ?> 
+0

Нет объяснений? – Rudie

2

Есть два вопроса:

Вы должны убедиться, что структура $bio матчей, что вы, как ожидается, пройти, так что $bio декларация должна быть :

$bio = array('bio_ids' => array('1234567')); 

Во-вторых вы должны json_encode эту структуру данных перед отправкой его на сервер:

CURLOPT_POSTFIELDS => json_encode($bio), 
Смежные вопросы