我使用PHP cURL与Rest API进行通信。大多数功能都是使用X-Ephemeral-Tokens执行的,但不幸的是,他们不允许通过这些功能提供删除权限,所以我不得不通过HTTP基本身份验证实现删除功能。
我遇到的麻烦是测试帐户的密码是随机字符串,包括多个特殊字符(其中一些是双引号)。我通过在单引号中包含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);
我尝试了各种引号和网址编码组合,但仍然会收到一条响应代码,表明身份验证无法正常工作。
这是基于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
有关如何解决这个问题的任何建议都非常感激。
答案 0 :(得分:5)
好的,如果有其他人有这个问题,我找到了解决方案。
基本上你可以在上面的代码中看到我试图使用cURL PHP方法来设置CURLOPT_USERPWD
和CURLOPT_HTTPAUTH
的选项。然而,在这个地方,密码中的特殊字符导致解析问题,我认为服务器实际上只有一部分正在使用。
但是,所有这些选项基本上都设置了HTTP标头,如@mpyw屏幕截图所示。这是Authorization
标头,格式如下:
`Authorization: Basic [base64 encoded username:password]`
所以我摆脱了这些选项并通过base64编码我的username:password
字符串然后添加标题来手动完成。
$auth = base64_encode($uname . ":" . $pass);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authorization: Basic $auth",
"Accept: application/json",
"Content-Type: application/json"));
现在一切正常!感谢那些发布答案的人 - 你们两个都为我提出了解决方法。
答案 1 :(得分:2)
答案 2 :(得分:0)
我相信您必须使用base64_encode用户名和密码。试试这个:
curl_setopt($curl, CURLOPT_USERPWD, base64_encode($uname . ":" . $pass));