[英]Nginx 401 with PHP cURL
為了獲得 oAuth2 令牌,我必須通過發送base64_encode(api_client_id:api_secret)
連接到 REST API URL: https://abcd/api/oauth/v1/token
。 此外,請注意,對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 Origin 的問題嗎?
以下解決方案即使有效(請閱讀以下內容)也不是一個好的解決方案。 通過在任意時間段內刪除 htpasswd 安全步驟(等於我的測試和開發時間的總和)解決了這個問題。 如果你這樣做要小心,因為谷歌可能會從屬於這個時間間隔的時刻開始索引網站。
我沒有嘗試按照@AngelDeykov 在評論中(不是在答案中)提出的那樣用逗號分隔字段值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.