URLSession:遵循来自 Google 电子表格的重定向

URLSession: Follow a redirect from Google Spreadsheet

我正在使用 google 表单收集数据,用户可以上传图片。这存储在 google 电子表格中,该电子表格发布到网络上,然后我将其作为 json 文件抓取。

在 json 中,图像 URL 以以下形式出现:https://drive.google.com/open?id=xxxx

如果我 curl -I 那个 URL,我得到一个状态代码 HTTP/2 307。如果我 curl -L 它重定向,我得到我想要的。

但是如果我将 URL 与 URLSession 一起使用,我会收到 200 响应:

po print(response)
Optional(<NSHTTPURLResponse: 0x600002d3e460> { URL: https://drive.google.com/file/d/xxx/view?usp=drive_open } { Status Code: 200, Headers { etc...

这就是我想要的URL!为什么 URLSession,谁的“默认是跟随重定向”,正确地重定向并给我那个页面?我是否必须解析出所需的 URL,然后进行第二个 URLSession 调用?

事实证明比我想象的要容易。存储在 google 电子表格中的图像 URL(或至少最初存储在 google 表单文档中的图像)采用以下格式:

https://drive.google.com/open?id=1M-BjN3..nonce..lbl9

如果我们将字符串 open?id 更改为 uc?id,则该字符串将转换为指向图像的有效 URL。

https://drive.google.com/uc?id=1M-BjN3..nonce..lbl9

在Swift中:

let corrected = imageUrl.replacingOccurrences(of: "open?id", with: "uc?id")