【问题标题】:Check url with NTLM on server side在服务器端使用 NTLM 检查 url
【发布时间】:2016-09-02 06:09:58
【问题描述】:

我需要检查 url 是否存在并且可以访问。为此,我发送 Get 请求并处理状态:

var httpClient = new HttpClient();
var response = httpClient.GetAsync(new Uri(pageUrl));
isPageAccessible = response.Result.StatusCode == HttpStatusCode.OK;

但是,服务器使用 NTLM 进行身份验证。正如我发现它here 一样,在我获得成功 OK 状态之前有几个步骤(请求)。对于第一个请求,我得到 401 Unauthorized 状态,无法进行进一步的步骤。

总而言之,在完成所有请求后,如何使用 NTML 检查服务器上的 url?

【问题讨论】:

标签: c# .net http ntlm


【解决方案1】:

如果您正在访问经过身份验证的服务器,则应提供凭据。 NTLM 运行进程的凭据可以通过HttpClient 提供,如下所示:

var handler = new HttpClientHandler { 
                      Credentials = System.Net.CredentialCache.DefaultCredentials
                  };
var httpClient = new HttpClient(handler);
var response = httpClient.GetAsync(new Uri(pageUrl));

【讨论】:

    【解决方案2】:

    您正在为失败做好准备,因为请求可能无法返回 200 OK 响应的原因有很多。一种可能是响应没有内容204 No Content。另一个可能是请求只接受POSTPUT 请求。正如您所发现的,另一个可能是它前面有一个身份验证系统401 Not Authorized。另一个可能只是响应是重定向301 Moved Permanently302 Found。或者它可能位于代理 305306 等后面。

    确定一个 URL 是否真的存在的唯一方法是请求另一端证明它。 Google 会这样做,Facebook 会这样做,Pinterest 会这样做,等等。他们这样做的方式是要求发件人在他们的 DNS 中设置一个 MX 记录,或者在他们的 index.html 上使用他们生成的自定义令牌设置一个元标记。如果令牌存在,那么他们就是他们所说的人。

    其他的都是不可靠的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 2020-10-14
      • 2014-12-12
      • 1970-01-01
      • 2013-01-06
      • 2015-11-29
      • 1970-01-01
      相关资源
      最近更新 更多