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
.
的实际下载
如果您在与浏览器交互时 运行 在后台使用像 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响应,会从Location
header中指定的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"
最近迁移了 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
.
如果您在与浏览器交互时 运行 在后台使用像 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响应,会从Location
header中指定的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"