2013-12-25 5 views
0

У меня есть локон команда работает из командной строкиPHP Curl эквивалент командной строки свернуться

curl -v -d '{"auth": {"passwordCredentials": {"username": "myusername", "password": "mypassword"}}}' -H 'Content-type: application/json' myurl 

Я пытаюсь написать эквивалент PHP локон команды -

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, myurl); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
$data = array('json' => '{auth: {passwordCredentials : {username : myusername, password : mypassword }}}'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
$output = curl_exec($ch); 
echo $output; 

я с другой ответ на оба звонки. У меня есть сомнения относительно правильной настройки json-данных.

+0

Что ваш вопрос? – underscore

+0

Не могли бы вы показать ответы, которые вы получаете? Насколько они разные? Какой из них дает результат, который вы ожидаете? – Floris

+1

Значение в $ data не является допустимой строкой JSON. Вам нужно использовать кавычки точно так же, как в примере с круткой командной строки. –

ответ

0

Вы можете использовать функцию json_encode, чтобы убедиться, что все правильно закодировано.

См. Например https://stackoverflow.com/a/4271654/1967396.

В вашем случае, это может выглядеть следующим образом:

$authData = array(auth => array(passwordCredentials => array(username => floris, password => secret))); 

, а затем создавать данные POST с

curl_setopt($ch, CURLOPT_POSTFIELDS, array('json'=>json_encode($authData))); 

Если вы

print json_encode($authData); 

вы получите

{"auth":{"passwordCredentials":{"username":"floris","password":"secret"}}} 

Предположительно, вы можете сделать это вручную, без функции json_encode.

+0

Спасибо, floris, я не думал об этом подходе 0: Кстати, я хотел, чтобы json string as - {"auth": {"passwordCredentials": {"username": "floris", "password": "secret" },}} "," после первого "}". – user3135240

+0

В исходном примере не было запятой. Зачем тебе это? Это решение проблемы для вас? – Floris

+0

Я понял, мне это не нужно. Благодарю. Он полностью не решил мою проблему, так как я все еще получаю такой же ответ, но часть, для которой я здесь (настройка json-данных правильно), решена. – user3135240

1

Наряду с вашим запросом на завивание также отправляйте HTTP-заголовок. Например:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json')); 

И почтовые данные должны быть:

$post_data = '{auth: {passwordCredentials : {username : myusername, password : mypassword }}}'; 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
+1

Хороший вызов о заголовке; не уверен, что вы можете уйти с 'JSON' без двойных кавычек (см., как' json_encode' делал что-то в моем ответе) – Floris

+1

с использованием json_encode - лучшая практика. но для этого случая он уйдет :-) –

Смежные вопросы