我有一个工作命令行curl命令
curl -v -d '{"auth": {"passwordCredentials": {"username": "myusername", "password": "mypassword"}}}' -H 'Content-type: application/json' myurl
我正在尝试编写等效的PHP curl命令 -
$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 :(得分:1)
除了curl请求,还要发送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 :(得分: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
功能。