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)
任何有关如何解决此问题的建议,我们将不胜感激。
好的,所以如果其他人遇到此问题,我都找到了解决方案。
基本上,您可以在上面的代码中看到我正在尝试使用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)
现在一切正常!感谢发布答案的人-你们俩都为我提出了解决方法。
| 归档时间: |
|
| 查看次数: |
4441 次 |
| 最近记录: |