首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PowerShell从请求流中下载zip文件

如何使用PowerShell从请求流中下载zip文件
EN

Stack Overflow用户
提问于 2020-01-11 03:14:32
回答 2查看 3.5K关注 0票数 1

目前,我向外部网站提交了一个POST请求,然后我应该得到一个zip文件作为回报。我可以得到压缩文件,但它是以xml格式提供的,只有name.zip,并且没有下载任何内容。我不知道为什么它不能下载。我的代码在我发出实际请求的地方如下。我不确定我是不是设计过度了,或者我还需要做些什么才能下载到实际的文件。

代码语言:javascript
复制
$url = "https://thewebsite.net/v6_1?id=$messageID"
Write-Output($url)
$Body = [byte[]][char[]]$xmlMessage
Write-Output($Body)
$Request = [System.Net.HttpWebRequest]::CreateHttp($url);
$Request.Method="POST"
$Request.ContentType = 'text/xml;charset=utf-8'
$Request.ContentLength = $Body.Length
$Request.ClientCertificates.Add($Certificate)
Write-Output($Request.ClientCertificates)
$Stream = $Request.GetRequestStream();
$Stream.Write($Body, 0, $Body.Length);
$Response = $Request.GetResponse()
$totalLength = [System.Math]::Floor($Response.get_ContentLength()/1024)
$responseStream = $Response.GetResponseStream()
$targetStream = New-Object -TypeName System.IO.FileStream -ArgumentList "D:\path\to\save\test.txt", Create
$buffer = new-object byte[] 1GB
$count = $responseStream.Read($buffer,0,$buffer.length)
$downloadedBytes = $count
while ($count -gt 0)
    {

        [System.Console]::CursorLeft = 0
        [System.Console]::Write("Downloaded {0}K of {1}K", [System.Math]::Floor($downloadedBytes/1024), $totalLength)
        $targetStream.Write($buffer, 0, $count)
        $count = $responseStream.Read($buffer,0,$buffer.length)
        $downloadedBytes = $downloadedBytes + $count
    Write-Output($count)
    }
    $targetStream.Flush()
    $targetStream.Close()
    $targetStream.Dispose()
    $responseStream.Dispose()
EN

回答 2

Stack Overflow用户

发布于 2020-01-11 05:42:32

不幸的是,如果没有特定的下载URI,就很难澄清你的情况是不是很重要,或者你只是选择了非最佳的方式来获取远程文件。使用Power-Shell获取".zip“(或任何其他'octet/stream‘文件)的常规方法是执行以下命令

代码语言:javascript
复制
Invoke-WebRequest -uri "https://thewebsite.net/v6_1?id=$messageID" -Method "GET"  -Outfile (-join($messageID,".zip"))  

然后在执行Power-Shell的目录中创建$messageID.zip文件,控制台窗口中会自动显示该进程。我在写答案之前测试了这个例子,当远程主机在响应中实际返回"octet/stream“时,它在方法"POST"/"GET”上独立工作。也许在您的情况下,文件在请求后没有直接返回

网站.net/v6_1?id=$messageID

但这不是你最初问题的重点。

票数 1
EN

Stack Overflow用户

发布于 2020-01-11 05:48:11

您尝试过使用Invoke-WebRequest吗?

代码语言:javascript
复制
$path = [Environment]::GetFolderPath("MyDocuments")
Invoke-WebRequest "example.com" -OutFile "$path\ZippedFile.zip"

不必使用变量,因为如果需要,可以在Invoke-WebRequest行中完全定义路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59687727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档