【发布时间】: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 模式,但这是在未来某个模糊点,而不是“今天”。