php - 带有 PHP cURL 的 Nginx 401
问题描述
为了获得 oAuth2 令牌,我必须通过以下 URL 连接到 REST API:https://abcd/api/oauth/v1/token
通过发送base64_encode(api_client_id:api_secret)
. 请注意,此外,访问https://abcd/api/oauth/v1/token
受 htpwd 保护。
所以我用 PHP 编写的请求是:
$base64_encoded_client_id_and_secret = base64_encode('api_client_id:api_secret');
$curl_session = curl_init();
curl_setopt($curl_session, CURLOPT_URL, 'https://abcd/api/oauth/v1/token');
curl_setopt($curl_session, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Basic ' . $base64_encoded_client_id_and_secret]);
curl_setopt($curl_session, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($curl_session, CURLOPT_USERPWD, "htpwd_user:htpwd_pwd");
curl_setopt($curl_session, CURLOPT_POST, true);
curl_setopt($curl_session, CURLOPT_POSTFIELDS, [
'grant_type' => 'password',
'username' => 'api_user',
'password' => 'api_pwd'
]);
$ret = json_decode(curl_exec($curl_session));
但是 Nginx 服务器返回错误 401。我能做些什么来修复这个错误?
我测试了不同的值而不是CURLAUTH_DIGEST
; 没有工作。
是 CROOS 起源问题吗?
解决方案
即使有效,以下解决方案也不是一个好的解决方案(阅读以下内容)。通过在任意时间段内删除 htpasswd 安全步骤(等于我的测试和开发时间的总和)解决了这个问题。如果您这样做,请小心,因为 Google 可能会从属于该时间间隔的时刻开始索引该网站。
我没有尝试用@AngelDeykov 在评论中提出的逗号分隔字段值(不是在答案中)。
推荐阅读
- vue.js - 使用 Rollup 将 Bootstrap-Vue 捆绑到 esm/min 文件中
- javascript - animationend 事件也会在子元素的动画结束时触发?
- asynchronous - 在 Rust 中将同步读取器流转换为异步读取器流?
- z3 - 使用 Z3 简化子句
- javascript - Jquery函数顺序获取变量以插入本地数据库
- go - go - 如何将 []byte 转换为 *x509.Certificate?
- c# - 填充无效且无法删除 - 解密问题
- javascript - 为什么该项目在计数中没有得到总和?
- javascript - Nuxt js 切换到生产环境时不加载图像
- python - SQLAlchemy Core - 使用 Mysql 的 python 字典列表的高效 UPSERT