我正在尝试抓取此网页,因为没有其他方法可以在其内容发生变化时自动发出警报:
https://airsdk.harman.com/runtime
使用 cURL 可以很好地下载页面(此时可以解析其内容),但使用 Invoke-WebRequest 或 System.Net.WebClient 的 DownloadFile/DownloadString 方法会导致出现错误,提示 Web 服务器返回 404 错误。
在 Chrome 中检查确认该页面总是响应为 404,但也返回内容,这正是我想要的。
使用 PowerShell 5.1,有没有办法指示 Invoke-WebRequest 忽略虚假的 404 错误,或者无论如何我都可以通过某种方法获取响应数据?
答案1
在PowerShell 7,有一个-SkipHttpErrorCheck
会让它Invoke-WebRequest
在你的用例中表现得像你想要的那样。
Invoke-WebRequest https://airsdk.harman.com/runtime -SkipHttpErrorCheck -OutFile C:\install\test.html
在PowerShell 5.1,使用curl.exe
。如果您使用的是 Windows 10 v1803 或更高版本,则curl.exe
随操作系统一起提供,如果您使用的是较低版本,则需要手动下载。
curl.exe https://airsdk.harman.com/runtime --output C:\install\abc.html
记得指定,.exe
因为curl
没有它只是一个别名Invoke-WebRequest
如果您不想使用curl.exe
,您所能做的就是将其包装起来try/catch
并通过异常访问响应数据,但实际上并不将其作为文件下载,并且没有您可能想要的那么多信息。
Try {
Invoke-WebRequest https://airsdk.harman.com/runtime -ErrorAction Stop
} Catch {
$_.Exception.Response
}
IsMutuallyAuthenticated : False
Cookies : {}
Headers : {Connection, Vary, X-Content-Type-Options, X-XSS-Protection...}
SupportsHeaders : True
ContentLength : 1123
ContentEncoding :
ContentType : text/html;charset=UTF-8
CharacterSet : UTF-8
Server :
LastModified : 08.10.2021 19:01:01
StatusCode : NotFound
StatusDescription :
ProtocolVersion : 1.1
ResponseUri : https://airsdk.harman.com/runtime
Method : GET
IsFromCache : False