在 Java 中如何完全验证 URL

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 在 Java 中如何完全验证 URL

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

当我们在 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 输入字符串,并执行有用的多步骤验证检查。


目录
相关文章
|
17天前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
46 4
|
7天前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
29 9
|
7天前
|
人工智能 Java 物联网
JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
28 7
|
3月前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
51 1
|
3月前
|
XML JSON 搜索推荐
【高手过招】JAVA网络编程对决:URL与URLConnection的高级玩法,你敢挑战吗?
【高手过招】JAVA网络编程对决:URL与URLConnection的高级玩法,你敢挑战吗?
64 0
|
3月前
|
存储 Java API
【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
【Azure 存储服务】Java Storage SDK 调用 uploadWithResponse 代码示例(询问ChatGTP得代码原型后人力验证)
|
7天前
|
Java 开发者
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
26 11
|
7天前
|
JSON 安全 算法
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
35 9
|
7天前
|
JSON Java API
JAVA网络编程新纪元:URL与URLConnection的神级运用,你真的会了吗?
本文深入探讨了Java网络编程中URL和URLConnection的高级应用,通过示例代码展示了如何解析URL、发送GET请求并读取响应内容。文章挑战了传统认知,帮助读者更好地理解和运用这两个基础组件,提升网络编程能力。
26 5
|
5天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。