Java/Python代理服务器设置详细教程

   在当今的企业开发环境中,我们不得不与代理打交道,通常是作为系统管理员。在大多数情况下,应用程序将配置为系统的默认设置,但如果您想对应用程序进行非常严格的控制,例如代理设置,对于这种情况,Java允许使用 API。

        该代理服务器是像客户端应用程序和其它服务器之间的中间系统。在企业应用程序中,用于跨网络边界提供对用户内容的控制。下图演示了代理服务器的行为:

java http 代理服务器设置详细教程

        在本主题中,我们将了解如何通过 Java 中的代理服务器进行连接。我们将遵循两种方法在 Java 中创建与代理服务器的连接。

  •         第一种方法是一种较旧的方法,它是 JVM 范围的并配置了系统属性。许多开发人员在全球范围内使用它。
  •         第二种方法是使用 Proxy 类,它通过允许基于每个连接的配置来提供更多控制。

        代理 API 从 Java 5.0 开始可用。但是,旧方法仍然有效并且可以用于我们的项目。但是 Proxy 类方法更有效且可定制。

  系统属性

        Java 支持不同协议的代理处理程序,例如FTP、HTTP、HTTPS和SOCKs。我们可以为单个处理程序定义一个单独的代理作为主机名和端口号。Java 代理配置中提供以下系统属性:

  •         proxyHost:它定义了 HTTP 代理服务器的主机名。
  •         proxyPort:它定义了 HTTP 代理服务器的端口号
  •         port 属性是一个可选属性,如果未提供,它将被设置为默认值 80。
  •         nonProxyHosts :它为我们想要绕过代理的可用主机模式定义了一个管道分隔(“|”)。它可以应用于 HTTP 和 HTTPS 处理程序。
  •         SocksProxyHost:它定义了 SOCKS 代理服务器的主机名。
  •         SocksProxyPort:定义了SOCKS代理服务器的端口号。

        注意:在 nonProxyHosts 的情况下,我们可以使用通配符(“*”)开始或结束主机模式。但是在Windows平台上,需要去掉“|” 分隔符。可以在此处找到所有可用代理系统属性的列表。

使用全局设置

        Java 提供了几个我们在上面讨论过的系统属性来配置 JVM 范围的行为。对于特定用例,这些属性很容易实现。

        我们还可以在调用 JVM 时使用命令行设置必要的属性。还有一种替代方法,可以通过在运行时调用System.setProperty()方法来设置它们。

        让我们了解如何使用命令行设置它们:

使用命令行设置代理

        我们还可以使用命令行参数设置代理属性。要使用命令行定义代理,请将设置作为系统属性传递,如下所示:

  •         java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3020 com.javatpoint.networking.proxies.CommandLineProxyDemo  

        通过这种方式启动进程,我们可以在 URL 上使用openConnection () 方法而无需做任何进一步的工作,如下所示:

  • URL url = new URL(RESOURCE_URL);  
  • URLConnection con = url.openConnection();  

使用 System.setProperty() 方法设置代理

        如果我们在使用命令行时遇到困难,可以使用 System.setProperty() 方法来替代。要使用此方法设置代理,请在我们的程序中按如下方式定义它:

  • System.setProperty("http.proxyHost", "127.0.0.1");  
  • System.setProperty("http.proxyPort", "3020");  
  • URL url = new URL(RESOURCE_URL);  
  • URLConnection con = url.openConnection();  
  • // ...  

        稍后,我们可以取消设置系统属性,如果需要,它们将从我们的应用程序中删除。要取消设置系统属性,请通过在我们的程序中定义它来使其为空,如下所示:

  • System.setProperty("http.proxyHost", null);  

        Global 设置有一些限制;在这里,代理 API 的概念出现了。让我们讨论一下全局设置的局限性:

全局配置方法的局限性

        全局配置方法是定义代理的最简单方法,但这种方法有一些局限性。

        这种方法提供了在 JVM 范围内的实现,因此为特定协议定义的设置在JVM的生命周期内都是有效的,或者直到我们手动取消设置它们。

        为了克服这个限制,如果需要,打开和关闭设置可能很有吸引力。但是,有必要确保采取措施防止多线程程序中的并发问题。

        因此,作为替代方案,代理 API 更高效,并提供对代理配置的更多控制。

使用代理 API 设置代理

        Java Proxy 类提供了一种基于连接配置代理的便捷方法。如果我们使用 Proxy 类设置代理,它将覆盖现有的 JVM 范围代理设置。

使用 Proxy 类的 Proxy.Type() 方法可以定义三种类型的代理:

  1. HTTP 代理(使用 HTTP 协议)
  2. SOCKS 代理(使用 SOCKS 协议)
  3. 直接代理(这是一个明确配置的没有代理的直接连接)。

下面以IPFoxy代理IP为例

创建简单代理服务器的 Java 程序和Python程序

导入java.net。*;
导入 java.io.*;
导入java.util.Scanner;

公开课主要
{

    public static void main(String[] args) 抛出异常
    {
        最终字符串 authUser =“用户名”;
        最终字符串 authPassword =“密码”;
        InetSocketAddress proxyAddress = new InetSocketAddress("gate-us.ipfoxy.io", 58688); // 设置代理 IP/端口。
        代理代理 = 新代理(Proxy.Type.HTTP,proxyAddress);
        URL url = new URL("http://www.ip-api.com/json"); //输入目标URL
        身份验证器 authenticator = new Authenticator() {
            公共密码认证获取密码认证() {
                返回(new PasswordAuthentication(authUser,authPassword.toCharArray()));//输入凭据
            }
        };
        System.setProperty("http.proxyUser", authUser);
        System.setProperty("http.proxyPassword", authPassword);
        系统.setProperty(“jdk.http.auth.tunneling.disabledSchemes”,“”);

        验证器.setDefault(验证器);
        URL连接 urlConnection = url.openConnection(代理);
        扫描仪扫描仪 = 新扫描仪(urlConnection.getInputStream());
        为了 (; ; ) {
            如果 (扫描仪.hasNext()) {
                系统.out.打印(扫描仪.next());
            }别的{
                休息;
            }
        }
        扫描仪.关闭();
    }
}
    
                
导入 urllib.request

如果 __name__ == '__main__':
    proxy = urllib.request.ProxyHandler({'https': '用户名:密码@gate-us-ipfoxy.io:58688'})
    opener = urllib.request.build_opener(代理,urllib.request.HTTPHandler)
    urllib.request.install_opener(开启器)
    内容 = urllib.request.urlopen('http://www.ip-api.com/json').read()
    打印(内容)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值