如何在C#中检查给定的URL是HTTP还是HTTPS

19

我需要检查一个给定的URL(不一定以http或https为前缀)是HTTP还是HTTPS。
在C#中是否有可能实现这个功能?
如果用户仅输入www.dotnetperls.com而没有任何前缀,我必须能够识别它是一个HTTP网址。 我已经尝试了以下代码:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("www.dotnetpearls.com");         
 string u = request.RequestUri.Scheme;

但这会导致无效的URL错误。它要求指定协议。


4
你的问题没有意义。如果一个网址没有https,那就是http。 - giammin
3
请使用WebClient并向HTTP发出请求,检查它是否为HTTP或HTTPS,然后将文本内容翻译成中文。 - giammin
你能提供一个不包含协议的示例URL吗? - Rowland Shaw
1
Web请求默认是HTTP协议。客户端不能忽略这一点,直接发送HTTPS请求。并非所有网站都启用了HTTPS。如果您在URL中没有明确指定HTTPS,则初始请求必须是HTTP,然后远程服务器可以发出重定向并将您指向HTTPS版本。但无论如何,您的初始协议无关URL访问必须是HTTP。HTTP 2.0似乎会改为默认使用SSL模式,但这是在未来的某个模糊时间,而不是“今天”。 - Marc B
显示剩余2条评论
6个回答

13
尝试这样做:
public static bool IsHttps()
{
    return HttpContext.Current.Request.IsSecureConnection;
}

如果你正在使用 ,你可以检查 Request.RequestUri.Scheme 是否为 Uri.UriSchemeHttps


但是我只有一个没有http/https前缀的URL,而不是一个HTTP请求本身。 - wickjon

10
var uri = new Uri("https://sss.com");
var requestType= uri.Scheme;

这里的requestType将告诉您请求的类型是http还是https


2
我的URL没有包含http/https前缀,因此无法使用它,否则会显示“URI格式不正确”的错误。 - wickjon

2
if (url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
{
}

1

我也一直在寻找同样的解决方案,但遗憾的是我没有找到。

有些网站也不支持www。

因此,我发送了4个请求来查找网站是否支持https,并找到一个支持的网站。

我知道这不是一个好的解决方案,但至少它能起作用。如果第一个成功了,我就不会调用其他的...

  1. WebRequest.Create("https://dotnetpearls.com");
  2. WebRequest.Create("https://www.dotnetpearls.com");
  3. WebRequest.Create("http://dotnetpearls.com");
  4. WebRequest.Create("http://www.dotnetpearls.com");

0

您可以使用HttpRequest.IsSecureConnection

HttpContext.Current.Request.IsSecureConnection   

或者,在请求对象可用的情况下。

Request.IsSecureConnection

1
但是我只有一个没有http/https前缀的URL,而不是一个HTTP请求本身。 - wickjon

0

对于ASP.net Core,属性Request.Scheme可用,适用于我:

var uri = String.Format("{0}://{1}",Request.Scheme,Request.Host.Value);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接