Php 如何在RESTAPI中传递令牌?
我第一次探索RESTAPI的世界,我已经不得不通过使用Slim来处理它,但是现在我想成为一个自制的解决方案,考虑到我不需要任何框架来制作一个简单的RESTAPI。 我所做的是创建如下页面:Php 如何在RESTAPI中传递令牌?,php,rest,curl,Php,Rest,Curl,我第一次探索RESTAPI的世界,我已经不得不通过使用Slim来处理它,但是现在我想成为一个自制的解决方案,考虑到我不需要任何框架来制作一个简单的RESTAPI。 我所做的是创建如下页面: <?php $method = $_SERVER['REQUEST_METHOD']; $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); switch ($method) { case 'PUT': echo "PUT
<?php
$method = $_SERVER['REQUEST_METHOD'];
$request = explode("/", substr(@$_SERVER['PATH_INFO'], 1));
switch ($method)
{
case 'PUT':
echo "PUT";
break;
case 'POST':
echo "POST";
break;
case 'GET':
echo "GET";
break;
case 'DELETE':
echo "DELETE";
break;
default:
handle_error($request);
break;
}
var_dump($_SERVER);
我得到get
,只是想举例说明它应该如何工作。所有其他查询也是如此。现在真正的问题是:如果我传递了一个令牌,我如何才能调用交换机中的方法?例如,将在页面顶部执行控制,并执行以下检查:
if(!isset($_SERVER['AUTH_USER']))
{
exit('TOKEN not provide');
}
另一个问题是如何通过curl传递令牌?因为如果我通过。。。
我可以通过curl读取标题,但它是如何工作的
更新:
正如@Paradoxis提到的,我试过:
url http://localhost/v1 -H "Authorization: <token>"
这就是结果:
Array
(
[Host] => localhost
[User-Agent] => curl/7.46.0
[Accept] => */*
[Authorization] => <token>
)
数组
(
[主机]=>本地主机
[用户代理]=>curl/7.46.0
[接受]=>*/*
[授权]=>
)
您如何在
请求\u头中查看
我可以在头中正确查看,但通过使用$\u服务器['Authorization']
或$\u服务器['HTTP\u Authorization']
我无法捕捉到它,您可以通过-H
参数通过curl传递头,如下所示:
curl http://localhost/v1 -H "AUTH_USER: <token>"
curlhttp://localhost/v1 -H“身份验证用户:”
如何在请求_标题中查看我在
标题,但我无法通过使用
$\u服务器['Authorization']或$\u服务器['HTTP\u Authorization']
每当您需要查看标题,甚至任何其他您认为应该可用的信息时,我建议您按如下方式进行调试:
<?php
$method = $_SERVER['REQUEST_METHOD'];
$request = explode("/", substr(@$_SERVER['PATH_INFO'], 1));
switch ($method)
{
case 'PUT':
echo "PUT";
break;
case 'POST':
echo "POST";
break;
case 'GET':
echo "GET";
break;
case 'DELETE':
echo "DELETE";
break;
default:
handle_error($request);
break;
}
var_dump($_SERVER);
您很可能会发现它是:$\u服务器['HTTP\u授权]
注意:这是区分大小写的!Php获取标题,大写键,将“-
”更改为“\
”并在“HTTP\
”前加前缀
注2:不要对定制令牌使用标准http头,如
授权
。那是给我的。如果您确实实现了自定义令牌,那么请使用自定义http头。现在很清楚了,但是。如果我执行您的命令:var\u dump($\u SERVER['AUTH\u USER'])代码>我得到Null
。为什么?@Dillinger你做过var\u转储($\u服务器)
?如果我没记错的话,您案例中的头将被加上前缀,类似于$\u SERVER['HTTP\u AUTH\u USER'])
,尽管特定的头可能是为HTTP身份验证保留的。我将令牌设置为:curl-X GEThttp://localhost/v1/ -H“AUTH\u USER:
我也尝试了:var\u dump($\u SERVER['HTTP\u AUTH\u USER'))
@DillingerHTTP\u AUTH\u用户
可能已被保留。投票以重复方式关闭。很难只选择一篇文章,因为这个话题经常被讨论。表明作者缺乏研究努力。而且,“真正的问题”只出现在文章的末尾。不要相信这可以或应该被挽救。“我没有投反对票,tho.@tonygil我想我的问题与你提出的有点不同,很抱歉你没有领会大意。这听起来像是一个问题,你到底想做什么?因为您似乎将标准http身份验证与基于“自定义”令牌的身份验证(如Oauth或许多其他身份验证)混合在一起@Gavriel Hi,所以这不是xy问题。我想实现一个令牌访问,它在API的每个请求中传递。当然,令牌是定制的,我不知道这是否是正确的方式。您建议如何作为身份验证令牌?我没有说任何关于值的内容,只说了头的名称。您可以使用令牌
:例如,我的意思是,您建议使用头作为访问令牌或其他技术?无论如何,我做了一个var\u转储($\u服务器)代码>有这样一个索引:['AUTHORIZATION']=>string(6)“master”
。现在,如果我尝试将其作为var_dump($_SERVER['AUTHORIZATION'])获取代码>或var_转储($_服务器['HTTP_授权])代码>我得到NULL
。我不明白为什么。我注意到如果我添加这个重写规则[E=AUTHORIZATION:%{HTTP:AUTHORIZATION}]
在.htaccess
中,我可以正确获取AUTHORIZATION
头,但是如果没有它,$\u服务器
变量中不会对头进行赋值。这可能是因为您试图使用具有标准含义的HTTP头。用令牌试试看