如何在 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中正确检查 HttpResponseMessage 的 http 状态代码?

用 R 检查远程目录是不是存在

如何使用 C# 获取检查元素代码

检查字符串是不是为有效 URL 的最佳正则表达式是啥?

检查字符串是否为有效URL的最佳正则表达式是什么?

如何在 Qt5 中检查 url 是不是可用?