powershell 到 return 并记录重定向的站点?
powershell to return and log redirected site?
大家下午好,
尝试创建一个脚本以转到网页并记录它是否被重定向到扩展服务器。例如,该站点是 site.school.net,在高负载下它应该转发到 site2.school.net 和 site3.school.net。我正在研究 powershell 只是因为我想学习它,但我对任何有用的东西都持开放态度。我试过了
Start-Process -FilePath FireFox -ArgumentList site.school.net
它会打开一个页面和所有其他内容,但我需要每隔 10-15 秒 运行 它并记录它被发送到的 url 。感谢任何帮助,提前致谢!
这是一个示例,但使用的是 Internet Explorer (11)。我不确定您是否可以使用 PowerShell 自动化 Firefox。在这个例子中,我得到了与原始 URL.
不同的输出
#Instanciate IE COM Object to interact with IE
$ie = New-Object -ComObject "InternetExplorer.Application"
#store original URL
$requestUri = "http://google.com"
#open the original URL in IE
$ie.navigate($requestUri)
#while IE is busy, wait for 250 seconds and try again
while ($ie.Busy) {
Start-Sleep -Milliseconds 250
}
#retrieve the actual/final URL from the browser
$ie.Document.url
不要为此使用 Web 浏览器,因为它会产生额外的开销,并使得 运行 从无人值守的系统(例如在计划的作业中)脚本非常困难或不可能。
使用 PowerShell 的 invoke-webrequest
cmdlet。
$redirecttest = invoke-webrequest -uri https://jigsaw.w3.org/HTTP/300/302.html -Method get -maximumredirection 0;
Write-Output "StatusCode: $($redirecttest.statuscode)";
Write-Output "Redirecting to: $($redirecttest.headers.location)";
这将尝试到达指定 URL 处的页面,并且不遵循重定向(如果有)。然后它捕获 HTTP headers 并输出 HTTP 状态代码(302
,在这种情况下永久移动)和我们被重定向到的位置。
它也会吐出一个错误,因为服务器指示客户端重定向的次数比客户端被告知重定向的次数多。无论如何处理这个错误 prefer/need.
然后您可以测试发送给您的重定向位置以验证重定向是否正常工作:
if ($Redirecttest.headers.location -eq "http://site2.school.net" -or $Redirecttest.headers.location -eq "http://site3.school.net") {
Write-output "Success";
} else {
Write-output "Redirect broken";
}
或者,您可以只调用 Web 请求并允许重定向,然后检查结果 URL。
$redirecttest = invoke-webrequest -uri https://jigsaw.w3.org/HTTP/300/302.html -Method get;
$redirecttest.BaseResponse.responseuri.AbsoluteUri;
请注意,这仅在 HTTP 服务器发送真值 HTTP 30X
status codes 时有效,而不是依赖于通过 META
标记或 JavaScript 的 client-side 重定向。
大家下午好, 尝试创建一个脚本以转到网页并记录它是否被重定向到扩展服务器。例如,该站点是 site.school.net,在高负载下它应该转发到 site2.school.net 和 site3.school.net。我正在研究 powershell 只是因为我想学习它,但我对任何有用的东西都持开放态度。我试过了
Start-Process -FilePath FireFox -ArgumentList site.school.net
它会打开一个页面和所有其他内容,但我需要每隔 10-15 秒 运行 它并记录它被发送到的 url 。感谢任何帮助,提前致谢!
这是一个示例,但使用的是 Internet Explorer (11)。我不确定您是否可以使用 PowerShell 自动化 Firefox。在这个例子中,我得到了与原始 URL.
不同的输出#Instanciate IE COM Object to interact with IE
$ie = New-Object -ComObject "InternetExplorer.Application"
#store original URL
$requestUri = "http://google.com"
#open the original URL in IE
$ie.navigate($requestUri)
#while IE is busy, wait for 250 seconds and try again
while ($ie.Busy) {
Start-Sleep -Milliseconds 250
}
#retrieve the actual/final URL from the browser
$ie.Document.url
不要为此使用 Web 浏览器,因为它会产生额外的开销,并使得 运行 从无人值守的系统(例如在计划的作业中)脚本非常困难或不可能。
使用 PowerShell 的 invoke-webrequest
cmdlet。
$redirecttest = invoke-webrequest -uri https://jigsaw.w3.org/HTTP/300/302.html -Method get -maximumredirection 0;
Write-Output "StatusCode: $($redirecttest.statuscode)";
Write-Output "Redirecting to: $($redirecttest.headers.location)";
这将尝试到达指定 URL 处的页面,并且不遵循重定向(如果有)。然后它捕获 HTTP headers 并输出 HTTP 状态代码(302
,在这种情况下永久移动)和我们被重定向到的位置。
它也会吐出一个错误,因为服务器指示客户端重定向的次数比客户端被告知重定向的次数多。无论如何处理这个错误 prefer/need.
然后您可以测试发送给您的重定向位置以验证重定向是否正常工作:
if ($Redirecttest.headers.location -eq "http://site2.school.net" -or $Redirecttest.headers.location -eq "http://site3.school.net") {
Write-output "Success";
} else {
Write-output "Redirect broken";
}
或者,您可以只调用 Web 请求并允许重定向,然后检查结果 URL。
$redirecttest = invoke-webrequest -uri https://jigsaw.w3.org/HTTP/300/302.html -Method get;
$redirecttest.BaseResponse.responseuri.AbsoluteUri;
请注意,这仅在 HTTP 服务器发送真值 HTTP 30X
status codes 时有效,而不是依赖于通过 META
标记或 JavaScript 的 client-side 重定向。