【问题标题】:Google drive api file_get_contents and reffererGoogle drive api file_get_contents 和referrer
【发布时间】:2017-12-04 11:24:43
【问题描述】:

我正在尝试列出 google 驱动器文件夹中的文件。

如果我使用 jquery,我可以成功获得结果:

var url = "https://www.googleapis.com/drive/v3/files?q='" + FOLDER_ID + "'+in+parents&key=" + API_KEY;

$.ajax({
    url: url,
    dataType: "jsonp"
}).done(function(response) {
     //I get my results successfully
});

但是我想用 php 得到这个结果,但是当我运行这个时:

$url = 'https://www.googleapis.com/drive/v3/files?q='.$FOLDER_ID.'+in+parents&key='.$API_KEY;
$content = file_get_contents($url);
$response = json_decode($content, true);
echo json_encode($response);
exit;

我收到一个错误:

file_get_contents(...):打开流失败:HTTP 请求失败! HTTP/1.0 403 禁止

如果我在浏览器中运行:

https://www.googleapis.com/drive/v3/files?q={FOLDER_ID}+in+parents&key={API_KEY}

我明白了:

请求未指定任何引用者。请确保客户端发送referer或使用API​​控制台解除referer限制。

我已经在谷歌开发者控制台中为我的网站和本地主机设置了推荐人。

谁能解释一下jquery和php调用有什么区别,为什么php调用会失败?

【问题讨论】:

标签: php jquery file-get-contents


【解决方案1】:

要么是标题,要么是 cookie。

当您使用 jQuery 执行请求时,用户代理、IP 和用户的额外标头以及用户的 cookie(允许用户保持登录状态)发送给 Google。当您使用 PHP 执行此操作时,此数据会丢失,因为 您,即服务器,成为发送数据的人,而不是用户,也不是用户的浏览器。

可能是 Google 阻止了使用无效用户代理的请求作为第一道防线,或者您需要登录。

在您注销时尝试执行相同的 jQuery AJAX 请求。如果它不起作用,你就知道你的问题了。

否则,您需要更改标题。看看这个:PHP file_get_contents() and setting request headers。当然,您需要进行一些反复试验才能确定哪个丢失的标头允许请求通过。

关于引荐来源网址,jQuery 可以工作,因为引荐来源网址标题设置为您当前所在的页面。当您直接访问该页面时,没有引荐来源网址。使用 file_get_contents 发出的 PHP 请求没有引荐来源网址,因为拥有任何引荐来源网址没有多大意义。

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    相关资源
    最近更新 更多