gpt4 book ai didi

elixir - 检查 URL 在 elixir 中是否有效

转载 作者:行者123 更新时间:2023-12-03 21:44:39 25 4
gpt4 key购买 nike

我想检查给定的 URL 是否有效,理想情况下该 URL 是否也可以解析。

首先,我将如何检查字符串有效性(即正则表达式)

其次,有没有办法可以查看 URL 是否实际解析为 Internet 上的资源?

谢谢

最佳答案

我将使用 URI 包以文本方式验证 URI,然后检查主机名是否通过 :inet.gethostbyname 解析,而不是使用正则表达式:

iex(1)> URI.parse("http://google.com/")
%URI{authority: "google.com", fragment: nil, host: "google.com",
path: "/", port: 80, query: nil, scheme: "http", userinfo: nil}

请注意 URI 结构的“主机”字段。如果它是相对资源,那么这将是 nil .此外,如果方案为 nil,即 http:// , 或 ftp://不见了。路径也应该在那里(“/”),即使它只是站点的根路径。然后您的验证是这些中的任何一个是否是 nil与否,是这样的:
defmodule Validation do
def validate_uri(str) do
uri = URI.parse(str)
case uri do
%URI{scheme: nil} -> {:error, uri}
%URI{host: nil} -> {:error, uri}
%URI{path: nil} -> {:error, uri}
uri -> {:ok, uri}
end
end
end

{:ok, uri} = Validation.validate_uri("http://google.com/")

然后,您可以将此“有效”uri 传递给 :inet.gethostbyname/1
iex(18)> :inet.gethostbyname(to_char_list a.host)
{:ok, {:hostent, 'google.com', [], :inet, 4, [{216, 58, 217, 46}]}}

如果由于某种原因失败 :inet.gethostbyname/1将返回 {:error, :nxdomain}

关于elixir - 检查 URL 在 elixir 中是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30696761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com