【问题标题】:How to download google CDN images?如何下载谷歌 CDN 图片?
【发布时间】:2022-02-16 06:24:33
【问题描述】:

在谷歌中,图像以 CDN URL 类型托管,我尝试从该 CDN 下载图像,但它在 C# 中引发错误。使用了下面附加的这个 c# 代码。

          using (var webClient = new WebClient())
            {
                byte[] imageBytes = webClient.DownloadData(imageUUl);
                System.IO.File.WriteAllBytes(@\"E:\\Temp\\img2.jpeg\", imageBytes);
            }

网址:https://lh6.googleusercontent.com/vpsleVfq12ZnALrwbIUqCTa0Fpqa5C8IUViGkESOSqvHshQpKCyOq4wsRfTcadG2WYgcW3m0yq_6M2l_IrSM3qr35spIML9iyIHEULwRu4mWw4CUjCwpVfiWnd5MXPImMw=w1280

提前致谢。

  • 你得到的错误是什么?
  • 这是我从代码“远程服务器返回错误:(403) Forbidden.\”中得到的错误,但该 URL 只能工作一次。当我在浏览器中刷新时,URL 将更改为 lh6.googleusercontent 并且刷新后在代码中不起作用
  • 403. 这是一个错误。您的客户端无权从此服务器获取 URL /vpsleVfq12ZnALrwbIUqCTa0Fpqa5C8IUViGkESOSqvHshQpKCyOq4wsRfTcadG2WYgcW3m0yq_6M2l_IrSM3qr35spIML9iyIHEULwRu4mWw4CUjCwpVfiWnd5MXPImMw=w1280。 (客户端IP地址:14.142.184.18)

标签: google-workspace google-cdn google-cloud-cdn google-gsuite


【解决方案1】:

在 GCP Cloud CDN 中,您可以使用带有身份验证的签名 URL 或签名 cookie 来授权用户并为他们提供访问受保护内容的限时令牌,因此 Cloud CDN 不会阻止没有签名查询参数或 Cloud- CDN-Cookie HTTP cookie。它拒绝具有无效(或其他格式错误)请求参数的请求,因此我建议检查您的浏览器客户端安全设置;如何将身份验证管理到您的 CDN URL。如果安全策略允许,一些客户端默认存储 cookie,还要检查您的 CDN URL 安全入口是如何配置的,因为当您使用带有签名 cookie 的 CDN URL 时,对签名和未签名请求的响应会分别缓存,因此成功响应一个有效的签名请求永远不会用于服务一个未签名的请求。 另一方面,如果您使用签名的 CDN URL 在有限的时间内限制对文件的安全访问,则需要首先执行一些步骤:

  • 确保已启用 Cloud CDN。

  • 如有必要,请更新到最新版本的 Google Cloud CLI:

                   `gcloud components update`
    
  • 为您的签名 URL 创建密钥

    要创建密钥,请按照下列步骤操作。

          1.In the Google Cloud Console, go to the Cloud CDN page.
          2.Click Add origin. 
          3.Select an HTTP(S) load balancer as the origin.
          4.Select backend services or backend buckets. For each one
    
             -Click Configure, and then click Add signing key.
    
             -Under Name, give the new signing key a name.
    
             -Under the Key creation method, select Automatically generate or Let me enter.
    
            - If you're entering your own key, type the key into the text field.
    
            - Click Done.
    
            - Under Cache entry maximum age, provide a value, and select a Unit of time from the drop-down list. You can choose among second, minute, hour, and day. The maximum amount of time is three (3) days.
    
         5. Click Save.
         6. Click Add.
    
  • 配置云存储权限。

在运行以下命令之前,至少向项目中的后端存储桶添加一个密钥;否则,该命令将失败并显示错误,因为在您为项目添加一个或多个密钥之前,不会创建 Cloud CDN 缓存填充服务帐户。将 PROJECT_NUM 替换为您的项目编号,将 BUCKET 替换为您的存储桶。

gsutil iam ch \ serviceAccount:service-PROJECT_NUM@cloud-cdn-fill.iam.gserviceaccount.com:objectViewer \ gs://BUCKET

  • 列出后端服务或后端存储桶上的密钥,运行其中一个 以下命令:

    gcloud compute backend-services describe BACKEND_NAME

    gcloud compute backend-buckets describe BACKEND_NAME

  • 签署 URL 并分发它们。

您可以使用gcloud compute sign-url 命令或使用您自己编写的代码对 URL 进行签名。如果您需要许多签名 URL,自定义代码可以提供更好的性能。 此命令从KEY_FILE_NAME 读取并解码 base64url 编码的密钥值,然后输出可用于 GET 的签名 URL 或给定 URL 的 HEAD 请求。

gcloud compute sign-url \
  "https://example.com/media/video.mp4" \
  --key-name my-test-key \
  --expires-in 30m \
  --key-file sign-url-key-file

在此link 中,您可以找到与签名 URL 和签名 cookie 有关的更多信息。

【讨论】:

    【解决方案2】:

    您不能以这种方式下载图像,因为您需要提供 OAuth token. 并且需要启用配置文件 scope

        var GoogleAuth; // Google Auth object.
    function initClient() {
      gapi.client.init({
          'apiKey': 'YOUR_API_KEY',
          'clientId': 'YOUR_CLIENT_ID',
          'scope': 'https://www.googleapis.com/auth/userinfo.profile',
          'discoveryDocs': ['https://discovery.googleapis.com/discovery/v1/apis']
      }).then(function () {
          GoogleAuth = gapi.auth2.getAuthInstance();
    
          // Listen for sign-in state changes.
          GoogleAuth.isSignedIn.listen(updateSigninStatus);
      });
    }
    

    【讨论】:

    • 没有@大卫。我正在研究 Gsuite Modern 网站体验实施。在 Gsuite 现代站点中,可以使用来自本地或云端硬盘文件的图像,一旦站点发布,该图像就托管在 CDN 中,并且只有在我检查 HTML 元素时,URL 才会是 CDN URL。
    • 使用我添加的上述代码在这里工作正常,但只是一次。示例 1:刷新站点,然后检查该图像 ULR,类似于:lh6.googleusercontent.com***。所以第一次,我可以用上面提到的代码下载它。示例 2:我再次尝试下载具有相同 URL 的图像,然后出现错误。然后我检查了 URL 已更改的站点。
    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2016-06-18
    • 2012-07-16
    相关资源
    最近更新 更多