Powershell webrequest 没有正确下载文件

Powershell webrequest not downloading file correctly

最近迁移了 boost,我们的一些脚本出现了问题。其中一位负责下载 zip 文件。这是文件本身的 link

https://boostorg.jfrog.io/ui/native/main/release/1.69.0/source

我感兴趣的文件是“boost_1_69_0.zip”。大小为 156.8Mb 的那个。

我使用以下命令下载文件

Invoke-WebRequest -Uri "https://boostorg.jfrog.io/ui/native/main/release/1.69.0/source/1.69.0.zip" -OutFile "C:\pwrShell.69.0.zip"

但是,下载的文件只有 15kb,不是有效的 zip。想知道我错过了什么吗?

该站点有点棘手 - https://boostorg.jfrog.io/ui/native/main/release/1.69.0/source 上的 boost_1_69_0.zip link 可能看起来像是 link 的 zip 文件,但当您单击它时,您实际上运行 一些 javascript 将浏览器带到网页 - /ui/api/v1/download?repoKey=main&path=release%252F1.69.0%252Fsource%252Fboost_1_69_0.zip.

此页面给出“302 Found”响应,将浏览器带到 link 在 https://jfrog-prod-usw2-shared-oregon-main.s3.amazonaws.com/aol-boostorg/filestore/07/074cb678b05fd327be1096b39a962aeb249372ac?x-jf-traceId=2593752ec87a6551&response-content-disposition=attachment%3Bfilename%3D%22boost_1_69_0.zip%22&response-content-type=application%2Fzip&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20211019T222020Z&X-Amz-SignedHeaders=host&X-Amz-Expires=60&X-Amz-Credential=AKIASG3IHPL63WBBRCUD%2F20211019%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=8e8b21c8a319e8cdc96044b8794dd3a359e265753bb7cf4913999fa753ffb47d

的实际下载

如果您在与浏览器交互时 运行 在后台使用像 Fiddler 这样的开发代理,您可以看到所有这些情况:

  • 请求 #3 是我的浏览器正在加载索引页面(包括 200 多个 javascript 捆绑文件)。
  • 请求 #252 是当我单击 boost_1_69_0.zip link 时,它触发了对 /ui/api/v1/download?repoKey=main&path=release%252F1.69.0%252Fsource%252Fboost_1_69_0.zip
  • 的 HEAD 请求和 GET 请求
  • 请求 #253 是接收 302 Found 响应的 GET 请求,将浏览器重定向到实际下载 link
  • 请求 #256 是浏览器发起的从 s3.amazon.aws.com 站点下载

所以,如果你想复制浏览器正在做的事情,你最好的选择是做这样的事情:

Invoke-WebRequest -Uri "https://boostorg.jfrog.io/ui/api/v1/download?repoKey=main&path=release%252F1.69.0%252Fsource%252Fboost_1_69_0.zip" -OutFile "1.69.0.zip";

Invoke-WebRequst会自动跟随https://boostorg.jfrog.io/ui/api/v1/download?repoKey=main&path=release%252F1.69.0%252Fsource%252Fboost_1_69_0.zip返回的302响应,会从Locationheader中指定的url下载文件响应。

PS

您从 https://boostorg.jfrog.io/ui/native/main/release/1.69.0/source/1.69.0.zip 下载的 15kb 文件是另一个网页 - 尝试将 url 放入浏览器,看看会发生什么。

这可以使用 API。我已导航至 https://boostorg.jfrog.io/ui/native/main/release/1.69.0/source 并使用 Chrome (F12) 调试在 link 上执行 clink 以检查发生的情况。但是常规 link 使用 HEAD HTTP 方法,return 200 OK 而不是重定向。 Invoke-WebRequest -Uri "https://boostorg.jfrog.io/ui/api/v1/download?repoKey=main&path=release%252F1.69.0%252Fsource%252Fboost_1_69_0.zip" -OutFile "C:\Data\Tmp.69.0.zip"