2015-04-17 5 views
0

Я использую CURL для получения ответа от некоторого веб-сервиса. Проблема заключается в том, что нужны некоторые данные POST в формате, как это:CURL отправить данные POST

{ 
    "type": { 
     "manufacturer": "AX", 
     "model": "AX", 
     "submodel": "AX" 
    } 
} 

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

$url = 'URL'; 
// Initiate curl 
$ch = curl_init(); 
// Disable SSL verification 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
// Will return the response, if false it print the response 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
// Set the url 
curl_setopt($ch, CURLOPT_URL,$url); 
// Execute 
$result=curl_exec($ch); 
// Closing 
curl_close($ch); 

// Will dump a beauty json :3 
var_dump(json_decode($result, true)); 

Я нашел способ, как использовать POST в скручиваются, и это должно выглядеть:

$fields = array(
       'manufacturer' => urlencode('AX'), 
       'model' => urlencode('AY'), 
       'submodel' => urlencode('AZ') 
       ); 
curl_setopt($ch,CURLOPT_POST, $fields); 

Но это не сработало для меня вообще :(, всегда получает ответ NULL. Пожалуйста, может кто-нибудь помочь мне фигурную, что я делаю неправильно?

+0

count отправит только количество массива, а не данные –

+0

Привет, Ричи, спасибо за ответ, вы были правы. Но даже если я удалю счет, я получаю ответ NULL – Andurit

+0

попробуйте с этим 'curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ yourArray)' также проверить на наличие ошибок –

ответ

0

Благодарим всех вас за помощь и предоставим вам правильные пути для решения этой проблемы.

Проблема была в пути я Вставьте JSON в начале, который вы помогли мне, после того, как некоторые погуглить я узнал, что я скучаю заголовок Accept: application/json а,

Так Окончательный вариант выглядит так:

$json = '{ 
    "type": { 
     "manufacturer": "AX", 
     "model": "AY", 
     "submodel": "AZ" 
    } 
}'; 
$ch = curl_init(); 
$url = 'WEB'; 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Accept: application/json')); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$json); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($ch); 

if($response === false){ 
    echo 'Curl error: ' . curl_error($ch); 
} 
else{ 
    print_r($response); 
} 
curl_close($ch); 

Спасибо все и хорошо провести выходные

+0

Я настоятельно рекомендую вам использовать json_encode, а не пытаться самостоятельно кодировать JSON, или вы быстро поймаете вопросы с кавычками и тому подобное. – jcaron

+0

спасибо за совет jcaron, я посмотрю на него – Andurit

0

Действительно ли вы отправляете данные через запрос POST или запрашиваете данные через запрос GET? Если последние видят Guzzle, поскольку он позволяет вам установить тело JSON, тогда как PHP cURL в настоящее время не будет. Использование жрать это так просто, как:

$request = $guzzleClient->createRequest('GET', $endpoint); 
$request->setBody(Stream::factory($jsonQuery)); 
$response = $guzzleClient->send($oRequest) 
2

Создать образец JSON, как они и пытаются с этим. вы можете получить данные образца от почтальона. Как вы сказали, вы можете отправлять сообщения через почтальон.

+0

Я действительно одобряю вашу помощь Ричи, но, похоже, мое умение не очень хорошо, я не уверен, как создать json с некоторым типом выше производителя, подмодели, модели. Есть ли шанс, что вы можете написать пример? – Andurit

+0

Это другой вопрос, который вы должны задать другому. Если вы можете создать такой массив, то 'json_encode' будет работать –

+0

Catchable fatal error: Объект класса stdClass не может быть преобразован в строку в $ data_json. Full COde: http://pastebin.com/quADrYxe – Andurit