PHP cURL - 具有基本身份验证的HTTP GET 403

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP cURL - 具有基本身份验证的HTTP GET 403相关的知识,希望对你有一定的参考价值。

首先,我的php和cURL体验总计为0,所以请忍受我的无知。 无论如何,我正在尝试使用Seneye API重新获得JSON:https://api.seneye.com/api/resources/view/q/device_get

我对这个过程有一个基本的了解,并且得到了我所需要的所有:id和基本身份验证:我使用https://www.hurl.it测试了所有这些,以确保所有凭据都正确,并检索完整的JSON。

我阅读并设法将以下PHP放在一起

<?php

$username = 'addusername'; //Example entry
$password = 'addpassword'; //Example entry
$URL = 'https://api.seneye.com/v1/devices/3442?IncludeState=1'; //Actual ID code different

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");

$result=curl_exec($ch);

$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

echo "HTTP CODE:: " . $status_code;

curl_close ($ch);

$json = json_decode($result, true);

echo "<br><br>";
print_r($json);

?>

但是我收到的是HTTP代码403作为回报,其中包含“Method not Allowed”消息。所以我只能假设我使用身份验证的方式有问题?!

任何和所有的帮助/建议表示赞赏。谢谢

答案

根据您提供的链接中的文档,URL应该在表单中

https://api.seneye.com/v1/devices/3442?user=***&pwd=***

其中用户名和密码作为查询字符串参数发送,而不是在授权标头中发送。

所以我认为您的PHP代码应如下所示:

<?php

$username = 'addusername'; //Example entry
$password = 'addpassword'; //Example entry
$URL = 'https://api.seneye.com/v1/devices/3442?IncludeState=1&user='.$username.'&pwd='.$password; //Actual ID code different

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

$result=curl_exec($ch);

$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

echo "HTTP CODE:: " . $status_code;

curl_close ($ch);

$json = json_decode($result, true);

echo "<br><br>";
print_r($json);

?>

请注意,从技术上讲,这不是正式定义的基本身份验证,而是自定义方案。从安全角度来看,它也不理想,因为浏览器和服务器通常会记录访问过的URL,这意味着凭证最终通常以纯文本形式存储在许多不同的地方。

以上是关于PHP cURL - 具有基本身份验证的HTTP GET 403的主要内容,如果未能解决你的问题,请参考以下文章

使用 curl 使用摘要测试基本 http 身份验证

在标头php curl中发送身份验证

使用基本身份验证通过 CURL 发布 JSON

具有C#中的用户身份验证的cURL

使用 HTTP-Basic 身份验证发出 HTTP GET 请求

HTTP 基本身份验证 - 预期的 Web 浏览器体验是啥?