2016-03-10 2 views
5

Я получил желаемый ответ, когда я отправляю cURL запрос от моего PHP скрипт.
Моя просьба такая.Как передать массив аргументов в cURL в командной строке?

$data = array ("[product[name]]" => "nw", 
       "[product[handle]]" => 150, 
       "[product[interval_unit]]" => "day", 
       "[product[interval]]" => 1, 
       "[product[price_in_cents]]" => 0, 
       "[product[initial_charge_in_cents]]" => 14200, 
       "[product[return_url]]" =>"http://mytrial.com/office/selfie/themes/adcampaign/56cee935-185c-4dfs-asdfa-2b6b0ae84a4d", 
       "[product[return_params]]" => "id={subscription_id}&customer_id={customer_id})"); 
$url="http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_USERPWD, 'sdfkjas2kjsd:x'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
$res = curl_exec($ch); 
curl_close($ch);  

Он работает нормально. Я хочу сделать такой же запрос в команде line.First я JSon кодируются массив и я пытался с этим команды

curl -u sdfkjas2kjsd:x -H Accept:application/json -H Content-Type:application/json -x POST --data product[name]=nw&product[handle]=142&product[interval_unit]=day&product[interval]=1&product[price_in_cents]=0&product[initial_charge_in_cents]=14400&product[return_url]=http:\/\/54.145.218.63\/dev_lpad\/launchpad\/advertisers\/adcampaign\/56cee935-185c-4349-a8a1-2b6b0ae84a4d&product[return_params]={id={subscription_id}&customer_id={customer_id}} http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json 

Тогда я получил ошибку.

Error: Unable to parse request body

Есть ли способ решить эту проблему?

UPDATE : The URL provided here is a dummy value,Actually i am trying to connect with Chargify API (Recurring billing solution).

+0

'-H Content-Type: application/json' Почему вы так выразились? – Quentin

+0

, потому что я пытаюсь отправить данные json –

+0

'product [name] = nw & product [handle] ...' не выглядит удаленно, как JSON – Quentin

ответ

3

Наконец-то я мог бы решить эту проблему, разделив параметры массива. Мой cURL cummand это.

curl -u sdfkjas2kjsd:x -d 'product[name]":nw' -d '[product[handle]]=161' -d '[product[interval_unit]]=day' -d '[product[interval]]=1' -d '[product[price_in_cents]]=0' -d '[product[initial_charge_in_cents]]=14200' -d '[product[return_url]]=http:\/\/mytrial.com\/office\/selfie\/themes\/adcampaign\/56cee935-185c-4dfs-asdfa-2b6b0ae84a4d' -d 'product[return_params]=id={subscription_id}&{customer_id={customerC_id}})' http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json 
0

Я думаю, вы должны поместить данные в одинарные кавычки

локон ... --data «некоторые данные здесь» ...

+0

Я проверил его. но без изменений –

+0

Я проверил его. но без изменений –

4

кажется, что ваш сервер не принимает JSon полезной нагрузки пост данные. Вы, наверное, забыли json_decode свои данные, здесь ошибка:

curl -u sdfkjas2kjsd:x -H Accept:application/json -H Content-Type:application/json --data '{"product":{"name":"nw","handle":150,"interval_unit":"day","interval":1,"price_in_cents":0,"initial_charge_in_cents":14200,"return_url":"http:\/\/mytrial.com\/office\/selfie\/themes\/adcampaign\/56cee935-185c-4dfs-asdfa-2b6b0ae84a4d","return_params":"id={subscription_id}&customer_id={customer_id})"}}' http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json 

Если я отправить его на мой PHP скрипт <?php var_dump(json_decode(file_get_contents('php://input'))); Я вижу правильный ответ:

object(stdClass)#1 (1) { 
    ["product"]=> 
     object(stdClass)#2 (8) { 
      ["name"]=> string(2) "nw" 
      ["handle"]=> int(150) 
    ... 
+0

'{" errors ": [" Имя: не может быть пустым. "," Интервал единиц: должен быть "месяц" или "день". "," Повторяющийся интервал: не может быть пустым. "," Цена: не может пустое. Введите «0», если бесплатно. »]}' this is out –

+0

Ну, похоже, что 'curl' теперь отправляет правильный запрос json, но есть некоторые проблемы с логикой. Я могу предположить, что '[product [name]]' должен быть заменен на 'product [name]' в команде. –

+0

также дает ту же ошибку –