【发布时间】:2023-12-24 19:41:01
【问题描述】:
我使用标准的[System.Net.WebRequest] 类来返回给定 URL 的 HTTP 响应代码。
该 URL 指向内部 Web 应用程序服务器,该服务器返回“401 Unauthorized”错误。这实际上没问题,因为运行脚本的服务帐户没有应用程序的有效帐户。但是,我更感兴趣的是该网站正在响应。但是,我假设这本身就是一个 HTTP 响应,所以我可以管理它,但它返回一个空值。
$HTTP_Request = [System.Net.WebRequest]::Create('http://google.com')
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = [int]$HTTP_Response.StatusCode
使用“0”参数调用“GetResponse”的异常:“远程 服务器返回错误:(407) 需要代理身份验证。"
(在这个例子中我使用的是谷歌,我们的服务器被阻止访问外部网站)。
所以我无法在代码中达到$HTTP_Status = [int]$HTTP_Response.StatusCode,因为它不会接受 400 错误作为代码。
如何在查询中接受 401(或本示例中的 407)?
谢谢
【问题讨论】:
-
因此,如果我理解正确,由于 401 未授权,您无法访问状态码?你是这么说的吗?我认为这是设计使然。系统会将您重定向到仅包含有限数据的 401 页面。 (不要引用我的话)。话虽如此,看到系统确实尝试验证您的凭据,您会得出结论,服务器仍然在线且处于活动状态。
-
.net 通过代理/在您的网络调用返回错误状态时生成错误来“帮助”您。生成错误后,您必须将代码包装在 try catch 中才能继续处理。
-
Snak3d0c - 是的,这正是我想说的,是的,它已处理凭据的事实表明该网站实际上正在响应,但我没有得到 200 OK。该 URL 将我带到 /login.aspx 屏幕,但由于某种我不明白的原因自动登录,因此给了我 401 错误
-
很奇怪。我只是在这里猜测,但是您在浏览器中是否有一些缓存的密码/凭据或其他东西?也许尝试清除那些?如果您不是在某处发帖并填写输入字段,它必须从某处获取数据,对吗?
-
我知道如何尝试/捕获,但之后我将如何获得响应代码?
标签: powershell http-status-code-401 http-response-codes