如何在 C# 中检查给定的 URL 是 HTTP 还是 HTTPS
Posted
技术标签:
【中文标题】如何在 C# 中检查给定的 URL 是 HTTP 还是 HTTPS【英文标题】:how to check if a given URL is HTTP or HTTPS in C# 【发布时间】:2014-01-07 20:43:09 【问题描述】:我需要检查给定的 URL(不一定以 http 或 https 为前缀)是 HTTP 还是 HTTPs。 这在 C# 中可行吗? 如果用户只给 www.dotnetperls.com 没有任何前缀,我必须能够识别它是一个 HTTP 的。尝试了以下,
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("www.dotnetpearls.com");
string u = request.RequestUri.Scheme;
但这会产生无效的 URL 错误。它期望指定协议。
【问题讨论】:
你的问题没有意义。如果一个 url 没有 https 它是 http 但在我的例子中,用户可以输入任何网址,例如 www.wikipedia.org,这实际上是一个 HTTPS。因此,在这种情况下,我需要确定它是 HTTPS 还是 HTTP,并仅在 HTTP 时相应地显示警告消息。 你必须使用 webclient 向 http 发出请求,并使用 Request.IsSecureConnection 检查它是 http 还是 https 你能提供一个不包含协议的示例 URL 吗? 网络请求默认为 http。客户端不能简单地忽略它并开始触发 https 请求。并非所有网站都支持 https。初始请求,如果您未在 url 中明确指定 https,则必须为 http,然后远程服务器可以发出重定向并将您指向 https 版本。但无论如何,您最初的无协议 URL 命中必须是 http。 HTTP 2.0 显然将更改为 ssl-first-by-default 模式,但这是在未来某个模糊点,而不是“今天”。 【参考方案1】:试试这样的:
public static bool IsHttps()
return HttpContext.Current.Request.IsSecureConnection;
或者,如果您使用 asp.net-web-api,您可以检查 Request.RequestUri.Scheme
是否为 Uri.UriSchemeHttps
。
【讨论】:
但我所拥有的只是一个没有 http/https 前缀的 url,而不是 http 请求本身。【参考方案2】:var uri = new Uri("https://sss.com");
var requestType= uri.Scheme;
这里requestType
会告诉你请求是http
还是https
【讨论】:
我的网址不包含 http/https 前缀。所以不能使用它,因为它会显示“URI 格式不正确”。【参考方案3】:if (url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
【讨论】:
【参考方案4】:我也一直在寻找相同的解决方案,不幸的是我找不到任何解决方案。
还有一些网站也不支持www。
所以我发送了 4 个请求来确定网站是否支持 https 并找到支持的那个。
我知道这不是一个好的解决方案,但至少它有效。 如果第一个有效,我不会打电话给其他人......
-
WebRequest.Create("https://dotnetpearls.com");
WebRequest.Create("https://www.dotnetpearls.com");
WebRequest.Create("http://dotnetpearls.com");
WebRequest.Create("http://www.dotnetpearls.com");
【讨论】:
【参考方案5】:对于 ASP.net 核心,可以使用适合我的属性 Request.Scheme:
var uri = String.Format("0://1",Request.Scheme,Request.Host.Value);
【讨论】:
【参考方案6】:您可以使用HttpRequest.IsSecureConnection
HttpContext.Current.Request.IsSecureConnection
OR,其中请求对象可用。
Request.IsSecureConnection
【讨论】:
但我所拥有的只是一个没有 http/https 前缀的 url,而不是 http 请求本身。以上是关于如何在 C# 中检查给定的 URL 是 HTTP 还是 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章