Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在RESTAPI中传递令牌?_Php_Rest_Curl - Fatal编程技术网

Php 如何在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

我第一次探索RESTAPI的世界,我已经不得不通过使用Slim来处理它,但是现在我想成为一个自制的解决方案,考虑到我不需要任何框架来制作一个简单的RESTAPI。 我所做的是创建如下页面:

<?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'))
@Dillinger
HTTP\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头。用
令牌试试看