Java HTTP Proxy Server2025年5月3日 | 阅读 7 分钟 在当今的企业开发环境中,我们通常需要与系统管理员打交道。在大多数情况下,应用程序将配置为使用系统的默认设置,但如果您想对应用程序进行非常严格的控制,例如代理设置,那么在这种情况下,Java 提供了 API。 代理服务器就像客户端应用程序和其他服务器之间的中间系统。在企业应用程序中,它用于在网络边界之间提供对用户内容的控制。下图演示了代理服务器的行为 ![]() 在本主题中,我们将了解如何在 Java 中通过代理服务器进行连接。我们将采用两种方法来创建与 Java 中代理服务器的连接。
Proxy API 自 Java 5.0 起可用。但是,旧方法仍然有效,可以与我们的项目一起使用。但 Proxy 类的方法更有效且可定制。 使用代理服务器的优点在以下情况下,代理服务器很有用
系统属性Java 支持各种协议的代理处理程序,如FTP、HTTP、HTTPS和SOCKS。我们可以为主机名和端口号定义的每个处理程序单独定义一个代理。以下系统属性可用于 Java 代理配置
注意:我们可以使用通配符("*")来开始或结束 nonProxyHosts 中的主机模式。但在 Windows 平台上,必须删除 "|" 分隔符。所有可用的代理系统属性列表可以在这里找到。使用全局设置Java 提供了我们上面讨论过的几个系统属性来配置 JVM 范围的行为。这些属性易于针对特定用例实现。 我们也可以在使用 JVM 时通过命令行设置必要的属性。有一种替代方法可以做到这一点,那就是在运行时调用System.setProperty()方法。 让我们了解如何使用命令行设置它们 通过命令行设置代理我们也可以使用命令行参数设置代理属性。要通过命令行定义代理,请按如下方式将设置作为系统属性传递 通过以这种方式启动进程,我们可以使用 URL 上的openConnection() 方法,而无需进行任何进一步的操作,如下所示 使用 System.setProperty() 方法设置代理如果我们在使用命令行时遇到困难,有一种替代方法可以通过使用 System.setProperty() 方法来做到这一点。要使用此方法设置代理,请在程序中按如下方式定义它 之后,我们可以取消设置系统属性,如果需要,它们将从我们的应用程序中删除。要取消设置系统属性,请在程序中按如下方式将其定义为 null 全局设置存在一些限制,这时 Proxy API 就派上用场了。让我们讨论全局设置的局限性 全局配置方法的局限性全局配置方法是定义代理最简单的方法,但这种方法存在一些局限性。 这种方法在 JVM 范围内提供实现,因此为特定协议设置的设置将在JVM 的生命周期内有效,或者直到我们手动取消设置它们。 为了克服这个限制,如果需要,开启和关闭设置可能会很有吸引力。但是,有必要确保采取措施来防止多线程程序中的并发问题。 因此,作为替代方案,Proxy API 更有效,并提供对代理配置的更多控制。 使用 Proxy API 设置代理Java Proxy 类提供了一种便捷的方法,可以根据连接配置代理。如果我们使用 Proxy 类设置代理,它将覆盖现有的 JVM 范围代理设置。 使用 Proxy 类的 Proxy.Type() 方法可以定义三种类型的代理
让我们来理解这些代理 1) HTTP 代理要使用 HTTP 代理,请将 SocketAddress 实例与代理包装,并将类型提供为Proxy.Type.HTTP。现在,我们可以简单地将代理实例传递给URLConnection.openConnection(). 考虑下面的代码 现在,我们将连接到 URL_STRING,然后将该连接路由到托管在 127.0.0.1:3020 的代理服务器。 2) DIRECT 代理Direct Proxy 对于直接连接到主机很有用。在这种情况下,我们必须通过使用静态 "proxy.NO_PROXY" 实例显式绕过可能已全局配置的代理。内部,Proxy API 会使用 Proxy.Type.Direct 类型创建一个新的代理实例。 请看下面的代码 基本上,如果没有全局配置的代理,那么这将与调用 openConnection() 而不带参数的效果相同。 3) SOCKS 代理SOCKS 代理在处理 URLConnection 时与 HTTP 变体的工作方式类似。在 SOCKS 代理中,我们首先使用 Proxy.Type.SOCKS 类型将 SocketAddress 实例与 Proxy 包装。之后,将代理实例传递给 URLConnection.openConnection。考虑下面的代码 我们也可以在使用 SOCKS 代理连接到 TCP 套接字时使用它。为此,我们需要使用 Proxy 实例创建 Socket。之后,将目标 SocketAddress 实例传递给 Socket.connect() 方法。 请看下面的代码 Java 程序创建简单的代理服务器TestProxyServer.java 输出 ![]() |
Java 中找不到或无法加载主类错误 在 Java 编程语言中,经常会遇到错误和异常。但是,一些最流行和最常见的错误经常被初学者程序员遇到。在这些错误中,找不到...
5 分钟阅读
在 Java 中,Snippet 是 jdk.jshell 模块和包中的一个类。它是在 Java 9 中引入的。它用于表示传递给 JShell.eval() 的 Java 源代码片段。它由 JShell 实例创建,因此...
阅读1分钟
Java 是一种流行且通用的编程语言,它提供了多种开发和部署应用程序的方法。创建 Java 程序的两种常见方法是独立应用程序和 Applet。这些方法服务于不同的目的并具有独特的特性。在本节中,我们将探讨独立应用程序和 Applet... ...
阅读 3 分钟
在 Java 中,错误基本上是 Junit 的一个异常,当 Junit 找不到可运行的测试方法时发生。在 spring boot 中,它是最常用的 Java 框架之一,它会抛出 no runnable methods 异常,因为没有可运行的测试方法...
5 分钟阅读
给出了一个数字n。我们的任务是找到数字n!中存在的数字的总数。示例1:输入整数n = 9输出:6说明:9!的值为9 x 8 x 7 x 6 x 5 x 4 x 3 x...
5 分钟阅读
如何在 Eclipse 中运行 Java 程序 在本节中,我们将一步一步学习如何在 Eclipse 中运行 Java 程序。步骤 1:打开 Eclipse 并单击 File > New > Java Project。步骤 2:提供项目名称并单击 Finish 按钮。步骤 3:在...
阅读1分钟
给定两个已排序的整数数组 nums1 和 nums2,以及一个整数 k。任务是确定 nums1[i] * nums2[j] 的第 k 个(基于 0)最小乘积,其中 0 <= i < nums1.length 且 0 <= j < nums2.length。示例 1:输入:nums1 = [2,8],nums2 = [3,4,5],k =...
阅读 6 分钟
在 Java 中,**继承 (inheritance)** 是最重要的 OOP 概念,它允许将一个类的属性继承到另一个类中。通常,它定义了一个 IS-A 关系。通过使用继承特性,我们可以从现有类派生出一个新类。Java 支持以下四种类型……
7 分钟阅读
调度程序在构建 Java 应用程序中扮演着重要角色。QuartzJobScheduling 是一个开源的作业调度库。它拥有一组丰富的功能,几乎可以集成到我们的 Java 应用程序中。我们可以将其与独立应用程序或最大的电子商务系统集成。Quartz 是...
阅读 6 分钟
在本文中,我们将学习并行编程这个主题。在本文中,我们将学习为什么以及在哪里使用 Java 中的并行编程。这有助于我们理解并行编程的重要性以及它有何不同...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India