错误401在PHP中使用curl访问REST API

时间:2012-02-06 00:57:31

标签: php rest curl

我正在尝试执行一个curl命令,我可以在终端中成功执行但是它在PHP脚本中失败并出现以下错误:

HTTP / 1.1 401 Unauthorized Access-Control-Allow-Origin:* Access-Control-Request-Method:* Cache-Control:no-cache Content-Type:application / json; charset = utf-8日期:星期一,2012年2月6日00:38:56 GMT服务器:nginx / 1.0.4 Set-Cookie:_parse_session = XXXXXX;域= .parse.com;路径= /; expires = Sun,06-Feb-2022 00:38:56 GMT; HttpOnly状态:401未经授权的WWW-Authenticate:Basic realm =" Parse" X-Runtime:0.002486 X-UA兼容:IE = Edge,chrome = 1内容长度:24连接:保持活动{"错误":"未授权"}

这是在终端中执行成功执行的命令:

curl -H"接受:application / json" -H" X-Parse-Application-Id:XXXXXXX" -H" X-Parse-REST-API-Key:XXXXXXXXX" -X GET" https://api.parse.com/1/classes/XXXXXX"

这是PHP代码:

$fields = array('Accept: '=>'application/json',
            'X-Parse-Application-Id:' => 'XXXXX',
            'X-Parse-REST-API-Key:' => 'XXXXX');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.parse.com/1/classes/XXXX');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_HEADER, $fields);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt(CURLOPT_USERPWD, 'XXXXXX');

$result = curl_exec($ch);
curl_close($ch);

有趣的是,当在终端中执行时,不需要身份验证信息。

帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:4)

您的标题字段在数组定义中不应该有:

'X-Parse-REST-API-Key:' => 'XXXXX');
                     ^---remove these

这会使字段名称成为:部分,因此您实际上是在发送:

X-Parse-REST-API-Key:: XXXXX
                    ^^---note the doubled colons

答案 1 :(得分:0)

您的标头是使用CURLOPT_HTTPHEADER设置的,而不是CURLOPT_HEADER,它需要一个布尔值