尽管连接 VPN 时可以手动访问 url,但 HttpWebResponse 为空

问题描述

有些网址只有在连接 VPN 后才能访问。例如:http://jira.xxx.com。对于公司,请说“xxx”。

我想知道 C# 中是否有任何方法可以帮助我检查连接 VPN 时是否可以访问此 url。这里的核心目的是在 VPN 未连接时返回错误,要求用户重试。

这是我尝试使用 HttpWebRequest 和 HttpWebResponse 进行的尝试,但是即使连接了 VPN,我也收到的响应为 null。 (请知道我可以手动访问 url,但代码中的响应显示为空,不知道为什么)

  public static bool IsUrlAccessible(string url)
  {
     try
     {
         HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;              
         request.Method = "HEAD"; 
        
         using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
         {
            response.Close();
            int statusCode = (int)response.StatusCode;

            Console.WriteLine("Status code is {0}",statusCode);

            if (statusCode >= 100 && statusCode < 400) 
            {
                return true;
            }                    
         }
                
      }
      catch (WebException ex)
      {
         Console.WriteLine("VPN is not connected."),ex);
      }            
      return false;       
   }

解决方法

由于我访问的是 HTTPS 页面,因此我必须将服务点安全协议设置为 Tls12。因为我们可以设置多个协议。我采用了最可取的情况。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;