我正在尝试列出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}
我明白了:
请求未指定任何引用。请确保客户端正在发送引用或使用API控制台删除引用限制。
我已经在google开发者控制台中为我的网站和localhost设置了引荐来源。
有人可以解释一下jquery和php调用之间有什么区别,为什么php调用失败?
答案 0 :(得分:0)
它是标题或Cookie。
当您使用jQuery执行请求时,用户代理,IP和用户的额外标题将发送给Google以及用户的Cookie(允许用户保持登录状态)。当您使用PHP执行此操作时,此数据将丢失,因为您,服务器将成为发送数据的人,而不是用户或用户的浏览器。
Google可能会阻止使用无效用户代理作为第一道防线的请求,或者您需要登录。
在您注销时尝试执行相同的jQuery AJAX请求。如果它不起作用,你就会知道你的问题。
否则,您需要更改标题。看看这个:PHP file_get_contents() and setting request headers。当然,您需要进行一些反复试验,以确定哪个丢失的标头允许请求通过。
关于referrer,jQuery有效,因为referrer标头被设置为您当前所在的页面。当你直接进入页面时,没有引用者标题。使用file_get_contents
发出的PHP请求没有引荐来源,因为它们对于它们没有任何意义。