为了从特定站点自动下载文件,该站点要求我将REST Web服务传递给JSON对象中包含的一些信息。为了做到这一点,我构建了一个哈希表,将其转换为JSON,然后将其添加到Invoke-WebRequest的主体。
$hash = @{ logonkey = "$logonkey";
tokenkey = "$tokenkey"
fileid = "$fileID"
}
$obj = $hash | convertto-json
$obj = 'obj=' + $obj
Invoke-WebRequest '$url' -Method POST -Body $obj -Outfile $localpath
然而,使用这种方法,相当大的文件永远不会完全下载。只下载了大约一半。据我所知,Powershell将响应对象完全加载到内存中,最后将其转储到指定的本地输出路径。这导致我寻找更好的方法,但我很难过。
在做了一些研究之后,似乎使用System.Net.WebClient最适合这个,因为它在整个下载过程中缓冲了对磁盘的响应。但是,我完全不知道如何使用此方法传递JSON对象。这可能吗?我是不是走错了路?
答案 0 :(得分:0)
请注意,我无法立即对此进行测试,但只需查看an example of this in C# ...就可能是这样的:
$hash = @{ logonkey = "$logonkey";
tokenkey = "$tokenkey"
fileid = "$fileID"
}
$obj = $hash | convertto-json
$obj = 'obj=' + $obj
$request = New-Object System.Net.WebClient
$request.Headers[HttpRequestHeader.ContentType] = "application/json";
$request.UploadString($url,$obj)
#I would think you could then use the DownloadFile method to pull your file down
$request.DownloadFile($url,$localpath)
再次,只是在黑暗中拍摄。