如何检查网址是不是有效[重复]

Posted

技术标签:

【中文标题】如何检查网址是不是有效[重复]【英文标题】:How to check if a url is valid or not [duplicate]如何检查网址是否有效[重复] 【发布时间】:2012-09-05 09:12:08 【问题描述】:

我正在尝试使用 .NET 从有效网址中过滤掉无效网址。

我正在为此使用Uri.TryCreate() 方法。

语法如下

public static bool TryCreate(Uri baseUri,string relativeUri,out Uri result)

现在我正在这样做......

Uri uri = null;

var domainList = new List<string>();
domainList.Add("asas");
domainList.Add("www.***.com");
domainList.Add("www.codera.org");
domainList.Add("www.joker.testtest");
domainList.Add("about.me");
domainList.Add("www.ma.tt");

var correctList = new List<string>();

foreach (var item in domainList)

    if(Uri.TryCreate(item, UriKind.RelativeOrAbsolute, out uri))
        
        correctList.Add(item);
    

我正在尝试上面的代码,我希望它能从列表中删除 asaswww.joker.testtest,但它没有。

有人可以帮我解决这个问题吗?

更新: 刚刚用 Uri.IsWellFormedUriString 尝试过,这也没有帮助。

更多更新

有效uri列表

http://www.ggogle.com www.abc.com www.aa.org www.aas.co www.hhh.net www.ma.tt

无效uri列表

asas 作为#@SAd this.not.valid www.asa.toptoptop

【问题讨论】:

joshua-smith.net/articles/view-article/3/… 看看这个:***.com/questions/924679/… 您对有效 URI 的定义是什么?您的所有示例都是有效的 URI,但并非所有示例都是真正的 您需要定义“无效”。如果“无效”意味着 URI 不存在,那么我的解决方案将起作用。如果“无效”表示“格式不正确”,则 O.D.解决方案就足够了。否则,您需要定义“无效”! MUSEUM 也是一个有效的***域。所以像“www.asa.MUSEUM”这样的东西是有效的吗?在这里检查 tlds:data.iana.org/TLD/tlds-alpha-by-domain.txt 【参考方案1】:

您似乎对究竟是什么 URL(或 URI,这里的区别并不显着)感到困惑。例如,http://***.com 是一个有效的绝对 URL。另一方面,***.com 在技术上是一个有效的相对 URL,但它会引用当前目录中名为 ***.com 的文件,而不是具有该名称的网站。但是***.com是一个注册的域名

如果你想检查一个域名是否有效,你需要定义你所说的“有效”到底是什么意思:

    它是一个有效的域名吗?检查字符串是否由点分隔的部分组成,每个部分可以包含字母、数字和连字符(-)。例如,asasthis.not.valid 都是有效的域名。 可以是 Internet 域名吗? Internet 上的域名(与 Intranet 相对)的特定之处在于它们始终具有 TLD(***域)。所以,asas 肯定不是互联网域名,但this.not.valid 可能是。 它是现有 TLD 下的域名吗?您可以下载the list of all TLDs 并进行检查。例如,this.not.valid 在此规则下不会被视为有效,但thisisnotvalid.com 会。 是注册域名吗? 域名是否解析为 IP 地址?可以注册一个域名,但它的 DNS 记录中可能仍然没有 IP 地址。 域名指向的计算机是否响应请求?最有意义的请求是简单的 HTTP 请求(例如,尝试访问 http://domaininquestion/)或 ping。

【讨论】:

【参考方案2】:

试试这个:

公共静态布尔IsWellFormedUriString( 字符串 uriString, UriKind uriKind )

或者您也可以使用 RegExp 来执行此操作,例如:

^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]2,3(/\S*)?$

看看这个list

【讨论】:

在阅读***.com/a/9356511/1182982后尝试,也不起作用 他们格式良好。正如 OP 在问题中添加的那样,它不能满足他的需求。 @Yasser 然后你必须发出请求并测试它是成功还是 404 错误【参考方案3】:

问题是您在此处添加的所有 url 都不会被归类为绝对 URL。为此,您必须为其添加 URL 协议的前缀。

您可以测试并找出答案

www.***.com - 相对 URLhttp://www.***.com - 绝对 URL //www.***.com - 绝对 URL(这里不奇怪。Refer RFC 3986: "Uniform Resource Identifier (URI): Generic Syntax", Section 4.2)

关键是您必须至少添加前缀 // 以表明它是绝对 URL。

因此,简而言之,由于您的所有网址都是相对网址,因此它通过了您的所有测试。

【讨论】:

这解释了问题中的代码有什么问题,但它无助于修复它。【参考方案4】:

你所有的例子都是有效的, 有些是绝对 URL,有些是相对的,所以没有一个会被删除。

对于每个 Uri,您可以尝试构建一个 HttpWebRequest 类 然后检查正确的响应。

【讨论】:

asaswww.joker.testtest 在列表中无效 从技术上讲,这是正确的。但是说www.***.com 是一个有效的相对URL 并不是正确的看待它的方式,因为这将代表当前目录中名为www.***.com 的文件。【参考方案5】:

在检查了其他人的答案后,我知道您不是在寻找域的存在并 ping 回您需要根据您的 GRAMMER... 或域名语法对它们进行测试吗?

为此,您只需要依赖正则表达式测试...并制定适当的规则来评估域名,如果它们失败,则将它们从列表中排除。

您可以adopt 这些模式并修改其中一个以满足您的需要,然后使用列表中的每个元素对其进行测试。

【讨论】:

【参考方案6】:

您所有的URIs 都是格式正确的URIs,所以TryCreateIsWellFormedUriString 不适用于您的情况。

来自here,解决方案正在尝试打开URI:

using(var client = new MyClient()) 
    client.HeadOnly = true;
    // fine, no content downloaded
    string s1 = client.DownloadString("www.***.com");
    // throws 404
    string s2 = client.DownloadString("www.joker.testtest");

【讨论】:

这里有什么MyClient ??

以上是关于如何检查网址是不是有效[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Vuejs - 检查图像网址是不是有效或损坏

在javascript中检查日期是不是有效[重复]

检查字符串是不是为有效数字的逻辑[重复]

在启动时检查文件是不是存在的有效方法[重复]

使用 gdb 检查指针是不是可能在核心转储中有效 [重复]

检查未知对象中的对象是不是存在的最有效的Javascript方法[重复]