1
我需要編寫一個腳本來檢查大量的Web資源,以查看它們是否需要HTTP身份驗證才能查看。有沒有一種快速檢查網頁/資源是否需要登錄憑證的方法?
有沒有一個快速的方法來做到這一點,無論是批處理文件或shell腳本。 (或PowerShell)。我已經嘗試了一些不同的腳本,但總是得到一個HTTP 200狀態碼(成功)
我需要輸出是這樣的:
Url http code credentials needed?
www.mywebsite.com/en/page.jsp 200 yes
一個401碼會工作爲好,只要因爲我知道它要求憑證。
這是我使用的一個小的powershell腳本,但這並不像我想的那樣工作。 (請求似乎超時的大部分時間):
## The URI list to test
$URLListFile = "C:\URLList1.txt"
$URLList = Get-Content $URLListFile -ErrorAction SilentlyContinue
$Result = @()
"<HTML><TITLE>Website Availability Report</TITLE><BODY background-color:peachpuff><font color =""#99000"" face=""Microsoft Tai le""><H2> Website Availability Report </H2></font><Table border=1 cellpadding=0 cellspacing=0><TR bgcolor=gray align=center><TD><B>URL</B></TD><TD><B>StatusCode</B></TD><TD><B>StatusDescription</B></TD><TD><B>ResponseLength</B></TD><TD><B>TimeTaken</B> </TD</TR>" |Out-File -append C:\Scripts\Test.htm
Foreach($Uri in $URLList) {
Write-Host $Uri
$request = $null
$request = [system.Net.WebRequest]::Create($Uri)
$request.Credentials = new-object System.Net.NetworkCredential("", "");
$request.PreAuthenticate = $true
$request.timeout = 2000
$time = try{
$response = $request.GetResponse()
} catch [System.Net.WebException] {
$request = $_.Exception.Response
$time = -1
}
$result = [PSCustomObject] @{
Time = Get-Date;
Uri = $uri;
StatusCode = [int] $response.StatusCode;
StatusDescription = $response.StatusDescription;
ResponseLength = $response.RawContentLength;
auth = $response.IsMutuallyAuthenticated;
TimeTaken = $time;
}
foreach($Entry in $result){
if($Entry.StatusCode -ne "200")
{
"<TR bgcolor=red>" |Out-File -append C:\Scripts\Test.htm
}
else
{
"<TR>" |Out-File -append C:\Scripts\Test.htm
}
"<TD>$($Entry.uri)</TD><TD align=center>$($Entry.StatusCode)</TD><TD align=center>$($Entry.StatusDescription)</TD><TD align=center>$($Entry.ResponseLength)</TD><TD align=center>$($Entry.timetaken)</TD></TD><TD align=center>$($Entry.auth)</TD></TR>" |Out-File -append C:\Scripts\Test.htm
}
$request=$null;
$response=$null;
}
"<HTML><TITLE>Website Availability Report</TITLE><BODY background- color:peachpuff><font color =""#99000"" face=""Microsoft Tai le""><H2> Website Availability Report </H2></font><Table border=1 cellpadding=0 cellspacing=0><TR bgcolor=gray align=center><TD><B>URL</B></TD><TD><B>StatusCode</B></TD><TD><B>StatusDescription</B></TD><TD><B>ResponseLength</B></TD><TD><B>TimeTaken</B></TD</TR>" |Out-File -append C:\Scripts\Test.htm
"</Table></BODY></HTML>" |Out-File -append C:\Scripts\Test.htm
Invoke-Expression C:\Scripts\Test.htm
不,沒有通用的方式來判斷一個頁面是否需要登錄。這是因爲它通常是基於你的意圖的人類判斷(想要發佈的人會說StackOverflow需要登錄,只是想瀏覽的人會說它不會。) –
這是一個基本的apache驗證登錄,是否會改變任何東西?當我取消登錄對話框時,我得到了401。 – Native
是的,這有很大的不同(我更新了措辭)。可悲的是,我不知道powershell,但是如果有人在尋找Unix shell等價物時發現你的問題,它會是'[「$(curl --silent -w」%{http_code}「http://example.com/-o/dev/null)「=」401「]')。 –