当前位置: 首页 > 知识库问答 >
问题:

谷歌云存储:恢复下载服务帐户抛出HTTP 401

白弘伟
2023-03-14
 40 $key = file_get_contents(KEY_FILE);
 41 $client->setAssertionCredentials(new Google_AssertionCredentials(
 42     SERVICE_ACCOUNT_NAME,
 43     array('https://www.googleapis.com/auth/devstorage.full_control'),
 44     $key)
 45 );
 46 
 47 $client->setClientId(CLIENT_ID);
 48 $service = new Google_StorageService($client);
 49 $buckets = $service->buckets;
 50 $bucketObj = new Google_Bucket();
 51 
 52 $time = time();
 53 $b_name = "test_bucket_"."$time";
 54 $bucketObj->setName($b_name);
 55 // $response = $buckets->insert('test_project-0001',$bucketObj);
 56 $response = $buckets->listBuckets('test_project-0001');
 57 $tokenStr = $client->getAccessToken();
 58 print "Token String : $tokenStr\n";
 59 $token = '';
 60 if(preg_match('/access_token\":\"(.*.)\",/', $tokenStr, $matches)) {
 61     print "Tken $matches[1] \n";
 62     $token = $matches[1];
 63 }
 64 
 65 
 66 $req = new Google_HttpRequest("https://www.googleapis.com/upload/storage/v1beta2/b/test_project-0001_test_bucket_1/o?uploadType=resumable&name=song");
 67 $req->setRequestHeaders(array(
 68                         'Authorization:' => "$token",
 69                         'X-Upload-Content-Length:' => '4509237'));
 74 $req->setRequestMethod('POST');
 75 // $req->setPostBody($e_body);
 76 
 77 var_dump($req);
 78 $gRest = new Google_REST();
 79 $response = $gRest->execute($req);
 80 var_dump($response);
 81 
 82 ?>

这会给出以下输出{“error”:{“error”:[{“domain”:“global”,“reason”:“autherror”,“message”:“invalid credentials”,“locationtype”:“header”,“location”:“authorization”}],“code”:401,“message”:“invalid credentials”}}

有人能给我指点我做错了什么吗?

共有1个答案

蒲勇
2023-03-14

我想通了。结果我需要发送一个经过身份验证的请求,如下所示:

63 $req->setRequestHeaders(array(
65                         'X-Upload-Content-Length:' => '4509237'));

(注意数组中没有身份验证参数)

77 $gcIO = new Google_CurlIO();
78 $response = $gcIO->authenticatedRequest($req);
79 $resp_uri = $response->getResponseHeader('location');

就这样

 类似资料:
  • 我计划使用GoogleDrive服务帐户,因为我的应用程序将使用它来存储实时API文档。这些将是快捷方式文件。在“帮助”页面上显示: 由于无法访问服务号的Google Drive网页风格用户界面,因此无法为此类帐户购买额外的Google Drive存储。因此,您可能更喜欢使用常规帐户而不是服务号。 我看到5GB的数字四处漂浮。如果我只创建快捷文件,我应该担心吗?这种限制是有目的的吗?如果有,原因何

  • 我在尝试从谷歌云存储下载CSV文件时遇到了一个问题。出于某种原因,它一直以字节而不是可读文本的形式下载文件。当我在Excel中打开下载的CSV时,Excel已经足够智能,可以将其转换为可读文本。我在这里错过了什么?我检查了谷歌的文档,但找不到任何好的信息来完成它们。提前谢谢你! 这是错误:UnicodeDecodeError:“utf-8”编解码器无法解码位置15-16的字节:无效的连续字节

  • 我正在调查AWS/Google云基础架构系统是否可以混合,我的要求之一是从一个系统到另一个系统的安全和简单的身份验证。目前,我需要从一个Google Cloud VM实例连接到一个受限的AWS S3 bucket。 我的问题通常是:有没有办法做到这一点,什么是最好的方法。我相信每个人都希望有机会使用多个云提供商为他们的基础设施提供高安全性、易用性和维护性。 经过一些研究,我发现唯一可能的方法是通过

  • 我试图从GCS读取文件。以下是我创建的方法。我在一些服务层中使用这个方法。因为这个方法中的一些调用是静态的和最终的,因为我的单元测试失败了。 以下是地面军事系统存储的代码: 我正试图为同样的问题编写Junit测试。但是文件。类是最终类,用于我收到空指针异常。 期待尽快收到你们的来信。

  • Googleapi版本:libs-sources/google-api-services-drive-v2-rev168-1.20.0-sources.jar java版本:“1.7.0_79”java(TM)SE运行时环境(build 1.7.0_79-B15)java HotSpot(TM)64位服务器VM(build 24.79-B02,混合模式) 还将下载的p12文件加载到\jdk1.7.

  • 我正在使用一个服务帐户访问我们的域名用户的谷歌驱动器,这工作像一个魅力!然而,我现在正在尝试使用相同的服务帐户获得用户的activity在谷歌驱动器。 我已授予服务帐户API访问https://www.googleapis.com/auth/activity和https://www.googleapis.com/auth/drive的权限 并启用API! 然而我总是得到错误403,禁止! 可能需要