2013-06-08 7 views
2

У меня есть следующая команда curl и вы хотите использовать с php curl. Команда, использующая curl в CLI, отлично работает.
Команда собирает данные из API веб-сервиса REST. Служба берет строку запроса с запросом URL как параметр «q» и возвращает простой список результатов, закодированный JSON.Преобразование команды CLI CLI в PHP

Curl команда:

curl -XGET 'user:[email protected]/cdtc-test/service.php/find/ca_objects?q=*' -  d '{ 
"bundles" : { 
"access" : { "convertCodesToDisplayText" : true }, 
"status" : { "convertCodesToDisplayText" : true }, 
"ca_entities.entity_id" : {"returnAsArray" : true } 
} 
}' 

я не работал в PHP, пока флаг -d со следующим кодом:

$curl = curl_init("user:[email protected]/cdtc-test/service.php/find/ca_objects?q=*"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec ($curl); 
curl_close ($curl); 

Мой вопрос, как я могу передать следующие данные - d, используя CURLOPT_POSTFIELDS ?. Я попытался с помощью следующего кода без каких-либо resutls:

curl_setopt ($curl, CURLOPT_POST, true); 
url_setopt ($curl, CURLOPT_POSTFIELDS, '{ 
"bundles" : { 
"access" : { "convertCodesToDisplayText" : true }, 
"status" : { "convertCodesToDisplayText" : true }, 
"ca_entities.entity_id" : {"returnAsArray" : true } 
} 
}'); 

Ниже приведен результат печати curl_getinfo ($ завиток);

Array ([url] => user:[email protected]/cdtc-test/service.php/find/ca_objects?q=* [content_type] => [http_code] => 0 [header_size] => 0 [request_size] => 0 [filetime] => 0 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0 [namelookup_time] => 0 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => -1 [starttransfer_time] => 0 [redirect_time] => 0 [certinfo] => Array () [redirect_url] =>) 

Я прошел через документацию и попробовал все, что мог, но я действительно потерялся здесь. Любая помощь будет принята с благодарностью.

ответ

1

Ответ был Bulding массив данных после флага -d, кодировать его, как JSON и отправить . Я не нашел его, разработчик мне помог. Вот код:

$va_body=array(
    "bundles" => array(
     "ca_objects.access" => array("convertCodesToDisplayText" => true), 
     "ca_objects.description" => array("convertCodesToDisplayText" => true), 
    ) 
); 

$curl = curl_init("user:[email protected]/cdtc-test/service.php/find/ca_objects?q=*"); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, GET); //Not sure why get here... 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($va_body)); 
$result = curl_exec ($curl); 
curl_close ($curl); 
2

Вы делаете запрос GET, не POST, так что я думаю, что PHP эквивалент будет:

$curl = curl_init("user:[email protected]/cdtc-test/service.php/find/ca_objects?q=*&" . urlencode('{ 
"bundles" : { 
"access" : { "convertCodesToDisplayText" : true }, 
"status" : { "convertCodesToDisplayText" : true }, 
"ca_entities.entity_id" : {"returnAsArray" : true } 
} 
}')); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec ($curl); 
curl_close ($curl); 
+0

Спасибо за ваш ответ! Я попробовал вас, но это не сработало. Жестко, я думаю, ты указал мне в правильном направлении. Еще раз спасибо. –