尽管连接 VPN 时可以手动访问 url,但 HttpWebResponse 为空
HttpWebResponse is null despite the url is accessible manually when VPN is connected
有些 url 只有连接 VPN 后才能访问。例如:http://jira.xxx.com。对于一家公司来说 'xxx'.
我想知道 C# 中是否有任何方法可以帮助我检查在连接 VPN 时我是否可以访问此 url。此处的核心目的是 return 如果 VPN 未连接则出现错误,要求用户重试。
这是我尝试使用 HttpWebRequest 和 HttpWebResponse 的方法,但即使连接了 VPN,我收到的响应也是空的。 (请知道我能够手动访问 url 但响应在代码中被视为 null,不知道为什么)
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;
有些 url 只有连接 VPN 后才能访问。例如:http://jira.xxx.com。对于一家公司来说 'xxx'.
我想知道 C# 中是否有任何方法可以帮助我检查在连接 VPN 时我是否可以访问此 url。此处的核心目的是 return 如果 VPN 未连接则出现错误,要求用户重试。
这是我尝试使用 HttpWebRequest 和 HttpWebResponse 的方法,但即使连接了 VPN,我收到的响应也是空的。 (请知道我能够手动访问 url 但响应在代码中被视为 null,不知道为什么)
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;