在 Java 中如何完全验证 URL

统一资源定位符 (URL) 用作 Internet 上唯一资源的地址。在我们的浏览器中输入网站 URL 可以检索构建我们正在访问的页面所需的 HTML/CSS 文件,而对端点 URL 进行 API 调用使我们能够远程访问和/或修改重要数据——列表还在继续。URL有效地促进了我们今天在互联网上认为理所当然的互连性。

6ad129a3f90fdba26beb5dbfdd3a674d.png

当我们在 Web 应用程序中捕获 URL 字符串输入时,验证这些输入以确保 URL 有用至关重要。检索和存储任何形式的地址数据(无论是 URL 地址、IP 地址,甚至是物理街道地址),而不立即验证其效用都是浪费时间;当我们将来试图访问重要资源时,它会让我们两手空空。

然而,自动化 URL 验证并不像听起来那么简单。任何给定的 URL 都可能同时出现多个问题,其中一些问题比其他问题更难发现,并且更耗费资源。我们可以从语法角度(即确保 URL 格式正确)来查看 URL 有效性,也可以从域和端点有效性的角度来看待它(即,确保域存在并且唯一资源实际上是可访问的)。

在本文中,我们将从语法、域和端点有效性的角度讨论什么是有效的 URL,并且我们将学习如何调用一个 API(使用随时可以运行的 Java 代码示例)来同时验证这三个因素。

了解 URL 有效性

验证 URL 字符串从检查 URL 语法开始。必须正确合并 URL 结构的每个组件才能访问任何给定 URL 的资源。

让我们快速分解一下有效 URL 的基本组成部分。我们将举一个简单的例子。https://example.com

有效的 URL 以正确键入的方案开头,该方案标识用于通信的 Internet 协议。在 的情况下,该协议是 。该方案后面必须跟有方案分隔符,以将其与 URL 的其余部分分开。方案语法中的错误很常见,但使用轻量级编程方法来说,它们相对容易识别。https://example.comhttps://

接下来,有效的 URL 会显示一个顶级域(例如,)和一个二级域(例如,)。子域(例如,)有时可以位于二级域之前。在此阶段,域语法错误可能涉及简单的拼写错误,例如 。如果 and 之间缺少句点,则表示缺少顶级域,并且无法访问 URL。.comexampleapi.examplehttps://examplecomexample com

语法至关重要,但仅验证语法并不能完全确保 URL 正常运行。拼写错误的域名在语法上可能看起来是正确的,但除非我们检查 DNS(域名系统)以查看它是否在那里注册,否则我们不会知道它是一个真正的域名。例如,如果我们将示例 URL 拼写错误为 ,我们将无法访问资源(除非也拥有该域),但从技术上讲,我们将有一个语法有效的 URL 字符串。https://exmpl.comhttps://example.comexample.comexmpl.com

此外,使用 DNS 查找验证域名并不一定意味着我们可以从该 URL 访问资源。具有已注册域名的格式正确的 URL 仍然可以指向由于某种原因而无法访问的资源。例如,如果我们计划对 进行 API 调用,则需要直接向 URL 端点发出请求,以确定它是否正在侦听并准备好按预期修改/返回资源。https://api.example.com

在 Java 中验证 URL

有几种标准方法可以在 Java 中验证 URL。在本例中,我们将简要讨论可用于此目的的两个常见类:、 和 。这两个类都是包的一部分,该包由 Java 开发工具包 (JDK) 提供。java.net.urlHttpURLConnectionjava.net

使用该类,我们可以在 URL 解析期间执行有限的验证检查。我们可以检查 URL 字符串中的语法错误,并且可以确保 URL 遵循标准格式。但是,此类主要不是为验证而设计的;相反,它旨在以其他重要方式处理 URL,例如解析或组合 URL。我们将无法使用此类验证域名和端点。java.net.url

使用该类,我们可以打开带有 URL 的连接,并检查底层服务器的响应代码。从技术上讲,这是一种验证 URL 端点的方法,但它有点耗费资源(而且,就像类一样,它没有明确地设计为考虑验证)。当我们使用这个类时,我们需要我们的应用程序来处理连接设置、发送请求、读取响应和管理错误——所有这些都给我们的服务器带来了沉重的负担。HttpURLConnectionjava.net.urlHttpURLConnection

使用免费 API 完全验证 URL

我们可以利用免费的 URL 验证 API,而不是围绕 Java 类构建 URL 验证工作流,该 API 代表我们执行详尽的 URL 验证检查。

这样,我们就可以非常轻松地一步验证 URL 语法、域存在性和端点可用性。也许最重要的是,我们可以将域和端点验证所涉及的繁重工作抽象到另一台服务器。我们的应用程序不需要自己处理 HTTP 连接管理或错误处理,而且 - 作为一个额外的好处 - 它也不需要直接处理可能具有威胁性的 URL。

如果我们使用此 API 来验证我们之前的示例,我们将获得以下响应:https://example.com

{
  "ValidURL": true,
  "Valid_Syntax": true,
  "Valid_Domain": true,
  "Valid_Endpoint": true,
  "WellFormedURL": "https://example.com/"
}

使用像这样的简单响应对象,我们可以根据几个重要的 URL 验证类别快速确定 URL 是否可用。

示范

为了利用这个多步骤 URL 验证 API,我们可以使用下面提供的现成的 Java 代码示例来构建我们的 API 调用,并且我们可以使用免费的 API 密钥来授权我们的 API 调用。使用免费的 API 密钥,我们每月最多可以进行 800 次 API 调用,而无需任何额外承诺。

要安装客户端 SDK,让我们在 Maven POM 文件(Jitpack 用于动态编译库)中添加对仓库的以下引用:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

然后,让我们向依赖项添加以下引用:

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v4.25</version>
</dependency>
</dependencies>

接下来,让我们将导入添加到我们的文件中:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.DomainApi;

之后,让我们使用以下示例来调用 URL 验证函数,并将“YOUR API KEY”占位符文本替换为我们自己的 API 密钥:

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

DomainApi apiInstance = new DomainApi();
ValidateUrlRequestFull request = new ValidateUrlRequestFull(); // ValidateUrlRequestFull | Input URL request
try {
    ValidateUrlResponseFull result = apiInstance.domainUrlFull(request);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling DomainApi#domainUrlFull");
    e.printStackTrace();
}

这就是我们需要的所有代码。现在,我们可以轻松地使用此 API 来捕获任何 Java Web 应用程序中的 URL 输入字符串,并执行有用的多步骤验证检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨曦_子画

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值