PHP Curl相当于命令行curl

时间:2013-12-25 21:29:12

标签: php json curl

我有一个工作命令行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数据表示怀疑。

2 个答案:

答案 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功能。