HTTP基本身份验证的编码密码字段

Bra*_*rae 3 php encoding curl http basic-authentication

我使用PHP cURL与Rest API进行通信。大多数功能是使用X-Ephemeral-Tokens执行的,但是不幸的是,它们不允许通过这些功能给予删除权限,因此我必须实现一个通过HTTP Basic Authentication进行删除的功能。

我遇到的麻烦是测试帐户的密码是一个随机字符串,包括多个特殊字符(其中一些使用双引号)。通过将username:password组合用单引号引起来,我使用了普通的cURL二进制文件来处理请求,'但是我不确定如何将其转换为PHP。相关代码段如下。

$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Accept: application/json",
                                              "Content-Type: application/json"));
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $uname . ":" . $pass);
curl_setopt($curl, CURLOPT_URL, "https://cloud.ravellosystems.com/api/v1/applications/" . $appid);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
$result = curl_exec($curl);
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用引号和URL编码进行各种组合,但仍然得到一个响应代码,表明身份验证不正确。

这是基于API文档显示的使用普通cURL的示例HTTP请求(略有修改)

curl -v -X DELETE -H "Content-Type: application/json" -H "Accept: application/json" --user ravello@ravello.com:password https://cloud.ravellosystems.com/api/v1/applications/414244
Run Code Online (Sandbox Code Playgroud)

任何有关如何解决此问题的建议,我们将不胜感激。

Bra*_*rae 7

好的,所以如果其他人遇到此问题,我都找到了解决方案。

基本上,您可以在上面的代码中看到我正在尝试使用cURL PHP方法来设置CURLOPT_USERPWD和的选项CURLOPT_HTTPAUTH。但是,在此密码中的某些特殊字符会引起解析问题,我认为服务器实际上只占用了其中的一部分。

但是,这些选项基本上都设置了一个HTTP标头,如@mpyw屏幕截图所示。这是Authorization标头,格式如下:

`Authorization: Basic [base64 encoded username:password]`
Run Code Online (Sandbox Code Playgroud)

因此,我摆脱了这些选项,并手动进行了此操作,方法是username:password自己对base64进行编码,然后添加标头。

$auth = base64_encode($uname . ":" . $pass);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authorization: Basic $auth",
                                              "Accept: application/json",
                                              "Content-Type: application/json"));
Run Code Online (Sandbox Code Playgroud)

现在一切正常!感谢发布答案的人-你们俩都为我提出了解决方法。