在服务器端使用 NTLM 检查 url
Check url with NTLM on server side
我需要检查 url 是否存在并且可以访问。为此,我发送 Get 请求并处理状态:
var httpClient = new HttpClient();
var response = httpClient.GetAsync(new Uri(pageUrl));
isPageAccessible = response.Result.StatusCode == HttpStatusCode.OK;
但是,服务器使用 NTLM 进行身份验证。正如我发现的 ,在我获得成功 OK 状态之前有几个步骤(请求)。对于第一个请求,我得到 401 Unauthorized 状态并且无法进行进一步的步骤。
总而言之,如何在完成所有请求后使用 NTML 在服务器上检查 url?
您正在为失败做好准备,因为请求可能 return 没有 200 OK
响应的原因有很多。一种可能是响应没有内容204 No Content
。另一种可能是请求只接受 POST
或 PUT
请求。另一个,正如您所发现的,可能是它前面有一个身份验证系统 401 Not Authorized
。另一个可能只是响应是重定向 301 Moved Permanently
或 302 Found
。或者它可能位于代理 305
、306
等之后
确定 URL 是否真的存在的唯一方法是要求另一端证明它。 Google 这样做,Facebook 这样做,Pinterest 这样做,等等。他们这样做的方式是要求发件人在他们的 DNS 中设置 MX 记录,或者在他们的 index.html 上使用自定义元标记他们生成的令牌。如果令牌存在,那么他们就是他们所说的人。
其他都不靠谱
如果您正在访问经过身份验证的服务器,您应该提供凭据。 运行 NTLM 进程的凭据可以通过 HttpClient
提供,如下所示:
var handler = new HttpClientHandler {
Credentials = System.Net.CredentialCache.DefaultCredentials
};
var httpClient = new HttpClient(handler);
var response = httpClient.GetAsync(new Uri(pageUrl));
我需要检查 url 是否存在并且可以访问。为此,我发送 Get 请求并处理状态:
var httpClient = new HttpClient();
var response = httpClient.GetAsync(new Uri(pageUrl));
isPageAccessible = response.Result.StatusCode == HttpStatusCode.OK;
但是,服务器使用 NTLM 进行身份验证。正如我发现的
总而言之,如何在完成所有请求后使用 NTML 在服务器上检查 url?
您正在为失败做好准备,因为请求可能 return 没有 200 OK
响应的原因有很多。一种可能是响应没有内容204 No Content
。另一种可能是请求只接受 POST
或 PUT
请求。另一个,正如您所发现的,可能是它前面有一个身份验证系统 401 Not Authorized
。另一个可能只是响应是重定向 301 Moved Permanently
或 302 Found
。或者它可能位于代理 305
、306
等之后
确定 URL 是否真的存在的唯一方法是要求另一端证明它。 Google 这样做,Facebook 这样做,Pinterest 这样做,等等。他们这样做的方式是要求发件人在他们的 DNS 中设置 MX 记录,或者在他们的 index.html 上使用自定义元标记他们生成的令牌。如果令牌存在,那么他们就是他们所说的人。
其他都不靠谱
如果您正在访问经过身份验证的服务器,您应该提供凭据。 运行 NTLM 进程的凭据可以通过 HttpClient
提供,如下所示:
var handler = new HttpClientHandler {
Credentials = System.Net.CredentialCache.DefaultCredentials
};
var httpClient = new HttpClient(handler);
var response = httpClient.GetAsync(new Uri(pageUrl));