file_get_contents(https://...@me):无法打开流:HTTP请求失败! HTTP / 1.1 401未经授权

时间:2015-01-27 19:10:59

标签: php html html5 http cookies

我正在开发一个网页,我必须从API(使用PHP)获取数据。验证工作正常,用户可以登录。要保存访问令牌,我在php中使用函数setcookie()。但是一段时间后数据消失了,我收到了以下警告:

Warning: file_get_contents(https://...@me): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in C:\wamp\www\main.php on line 40

这些是:

function getUser($access_token){
$url = "https://jawbone.com/nudge/api/v.1.0/users/@me";

$opts = (array(
    'http'=>array(
        'method'=>"GET",
        'header'=>"Authorization: Bearer {$access_token}\r\n"
    )
));

$context = stream_context_create($opts);
$response = file_get_contents($url, false, $context); //

$user = json_decode($response, true);
return $user['data'];
}

实际上它非常奇怪,因为当我删除访问令牌cookie然后再次登录(并进行身份验证)时它会起作用...我根本不明白为什么会这样。

设置cookie(过期时间为31536000):

 if (!isset($_COOKIE['access_token'])) {
        setcookie('access_token', $data, time() + ($json['expires_in']));
    }

你能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:0)

检查您的Cookie到期日期,即使该令牌可能在您的方面有效,该Cookie可能会提前到期。

答案 1 :(得分:0)

也许有点分手。从最简单的任务开始,让它工作。所以,假设你需要一个api调用,让这个调用工作。如果有效,请继续下一步。

如果api调用需要一个秘密令牌,我可以想象你不想只是让它给任何用户存储它作为cookie。

下一步是身份验证。如果你不仅是PHP的新手,而是一般的Web应用程序,我会从一些不那么具有挑战性的东西开始。

但是我们假设你很快就会掌握它,下一步(永远不会是最后一步)可能是一个安全决定:用户是否需要进行api调用,或者我可以为用户执行此操作一旦用户被授权,执行api呼叫服务器端?