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

Posted

技术标签:

【中文标题】在 PHP 中使用 curl 访问 REST API 时出现错误 401【英文标题】:Error 401 using curl in PHP to access REST API 【发布时间】:2012-02-27 14:24:24 【问题描述】:

我正在尝试执行一个 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;路径=/;过期=星期日,2022 年 2 月 6 日 00:38:56 GMT; HttpOnly 状态:401 未经授权 WWW-Authenticate:Basic realm="Parse" X-Runtime:0.002486 X-UA-Compatible:IE=Edge,chrome=1 Content-Length:24 Connection:keep-alive "error":"unauthorized "

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

curl -H "Accept: 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);

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

我们将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

您的标题字段不应在数组定义中包含:

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

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

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

【讨论】:

以上是关于在 PHP 中使用 curl 访问 REST API 时出现错误 401的主要内容,如果未能解决你的问题,请参考以下文章

如何在服务器端访问 PHP REST API PUT 数据?

如何在php中使用CURL调用REST API?

CURL:将带边界的图像发送到 REST API

PHP 简单的PHP Rest Cient使用curl

使用 REST 在 php 中上传文件

使用 PHP cURL 通过 REST API 获取 JSON