gpt4 book ai didi

powershell - 从catch block 运行时,为什么Invoke-WebRequest不跟随重定向

转载 作者:行者123 更新时间:2023-12-03 00:07:45 33 4
gpt4 key购买 nike

我在Mac OS X 10.14.5上的PowerShell Core v6.1.0上运行代码。

我有一个要使用Invoke-WebRequest进行验证的网站列表。可以说该列表包含以下网站

 http://www.google.com
http://www.microsoft.com
http://www.hp.com
https://go.microsoft.com/fwlink/?LinkID=835028 http://samanage.bz
http://samanage.agency

如果我使用下面的代码来验证网站是否可访问,则一切正常。

$sites = Get-Content ./Sites.txt

foreach ($site in $sites){
$request = Invoke-Webrequest $site
Write-Host "Status for $site is $($request.StatusDescription)."
}

检查每个网站是否有效后,我想查看网站是否重定向到某个地方,因此我添加了try / catch并将最大重定向限制为0

$sites = Get-Content ./Sites.txt

foreach ($site in $sites){

try{
$request = Invoke-WebRequest $site -MaximumRedirection 0
$siteStatus = $request.StatusDescription
}

catch{
Write-Host "$site is being redirected"
$request = Invoke-WebRequest $site -Method HEAD

# I actually use regex to pull out the destination site
# from the Headers.Link attribute, but left it out for
# simplicity

$siteStatus = $request.Headers.Link
}

Write-Host "Status for $site is $siteStatus."
}

预期对于使用重定向的任何网站,第一个请求将失败,并被捕获在catch块中。然后,将在没有重定向限制的情况下重新运行请求,并且可以从Headers.Link中提取重定向目标。

该代码对于前四个条目工作正常,但是后两个条目未正确遵循重定向,而是导致此错误:

Invoke-WebRequest : Response status code does not indicate success: 302 (Found)



我尝试过询问Google,但是当我在catch块中运行 Invoke-WebRequest时会导致不同的结果,但还没有发现是什么原因。

有人知道是什么原因造成的吗?

最佳答案

302是重定向状态,因此似乎您正在再次被重定向。 -MaximumRedirection的默认值为5;是否有超过5个重定向发生?也许是无限重定向循环?您可以先尝试将数字设置得更高一些。您还可以在catch中添加检查以比较$site$siteStatus是否相同,但是您必须确定网址的哪些部分相同(仅主机名,路径,查询,方案,斜杠,等等。)。强制转换为[uri]以便您获得一些预填充的属性也可能会有所帮助。

关于powershell - 从catch block 运行时,为什么Invoke-WebRequest不跟随重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57228196/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com