2

我目前正在开发一个充当客户端文件服务的应用程序。该应用程序连接到一个从中检索文件的 Google 帐户。我已经为这个帐户存储了访问和刷新令牌,并且已经授权了所有必要的东西。

我们使用云端硬盘作为存储解决方案,并允许客户通过我们的应用程序访问我们云端硬盘帐户中的某些文件夹。从我们的应用程序中,他们可以看到文件列表,然后下载这些文件。问题是标准的驱动器下载方法都要求用户登录到谷歌帐户,如果不是,它会将他们重定向到登录页面。一旦他们登录到谷歌,下载就可以工作,但我们需要它在他们没有登录到谷歌的情况下工作。

有没有办法解决?我尝试了几种方法来解决它(手动授权的 cURL 请求、授权的 php-api httpRequests 等),但没有任何工作。

4

1 回答 1

1

这就是我使用示例 php 所做的。(所有身份验证的东西都被剥离了。)

$service = new Google_DriveService($client);
$url="the_url_to_your_document_according_to_$service->files->listFiles";
$request = new Google_HttpRequest($url);
$response = $client->getIo()->authenticatedRequest($request);
$content = $response->getResponseBody();

现在您可以通过管道$content传递给用户(当然如果没有错误的话)。

编辑:我做了一些测试,您可以使用 Curl 身份验证直接下载。如果您收到 401 错误,则说明您使用的访问令牌已过期。只需获得一个新的(带有身份验证的新登录名)并直接进行卷曲(在 3600 或 1800 秒内):

curl -o testfile -v -H 'Authorization: Bearer ya29.yournewone' 'https://docs.google.com/feeds/download/xxx'

它对我有用。您可以根据该页面使用“downloadUrl” 。无需使用 getWebContentLink。

如果您想要长期令牌,您需要请求“刷新令牌”。您可以在此页面上找到一些信息。请求底部该页面上提到的这些数量有一些限制。

编辑#2:刚刚做了另一个测试。我可以通过添加&access_token=ya29.xxxxxxxxxx. 'ya29.xxxxxxxxxx' 是您最新的 access_token。如果您使用 downloadUrl 而不是获取 WebContentLink(只需要最近的 access_token),则无需通过 Curl 进行身份验证,并且用户不必登录 Google。所以我可以在每个人都可以下载文件的页面上设置这个链接(大约半小时后需要刷新链接/access_token)

于 2013-09-20T23:20:32.753 回答