HTTP 代理服务器使用 little proxy实现https://github.com/adamfisk/LittleProxy
maven依赖:
<dependency> <groupId>org.littleshoot</groupId> <artifactId>littleproxy</artifactId> <version>1.0.0-beta7</version> </dependency>
客户端代码:
package com.bigtian; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.SocketAddress; import java.net.URL; import java.net.URLConnection; /** * Created by bigtian on 15/5/30. */ public class ProxyTestCase { public static void main(String[] args) throws Exception { URL url = new URL("http://www.baidu.com"); SocketAddress address = new InetSocketAddress("localhost", 8080); Proxy proxy = new Proxy(Proxy.Type.HTTP, address); URLConnection connection = url.openConnection(proxy); connection.connect(); BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; String result = ""; while ((line = br.readLine()) != null) { result += line; } System.out.println(result); } }
代理服务器代码:
package com.bigtian; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.HttpObject; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; import org.littleshoot.proxy.HttpFilters; import org.littleshoot.proxy.HttpFiltersAdapter; import org.littleshoot.proxy.HttpFiltersSourceAdapter; import org.littleshoot.proxy.HttpProxyServer; import org.littleshoot.proxy.impl.DefaultHttpProxyServer; /** * Created by bigtian on 15/5/30. */ public class ProxyTest { public static void main(String[] args) { HttpProxyServer server = DefaultHttpProxyServer.bootstrap() .withPort(8080) .withFiltersSource(new HttpFiltersSourceAdapter() { public HttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerContext ctx) { return new HttpFiltersAdapter(originalRequest) { @Override public HttpResponse requestPre(HttpObject httpObject) { return null; } @Override public HttpResponse requestPost(HttpObject httpObject) { return null; } @Override public HttpObject responsePre(HttpObject httpObject) { return httpObject; } @Override public HttpObject responsePost(HttpObject httpObject) { return httpObject; } }; } }) .start(); } }
相关推荐
通过这个简单的Java动态代理demo,你可以了解到如何在实际项目中利用动态代理进行功能扩展,同时避免了为每个接口编写单独的代理类。这种技术可以极大地提高代码的可复用性和可维护性,是Java开发中一个强大的工具。
在Java编程中,代理模式是一种常用的结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式通常用于增加额外的功能或在访问原始对象时进行额外的操作,比如日志记录、性能监控等。Java提供了两...
Java代理类是面向切面编程(AOP)的一种实现方式,它允许我们在不修改原有代码的情况下,为已有的对象提供额外的功能。在这个“java proxy demo”中,我们将深入探讨如何利用Sun JDK API来创建和使用Java动态代理。 ...
Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理对象,这些代理对象可以扩展或增强已存在的接口实现。动态代理在处理AOP(面向切面编程)场景、事件监听、性能监控等方面有着广泛的应用。下面我们将...
java 反向代理demo
Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理对象,这些代理对象能够拦截方法调用并在调用前后执行自定义的行为。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect....
在Java编程中,代理模式是一种设计模式,它允许我们在不修改原有对象的基础上,在对象周围创建一个代理对象,这个代理对象可以扩展目标对象的功能或者控制对目标对象的访问。代理模式通常用于实现动态代理、远程代理...
java代理转发demo
Java Jdk 和 Cglib 动态代理 Demo 1.通过 JDK 反射形式创建动态代理 2.通过CGLIB基于ASM字节码技术创建动态代理 3.Java 反射原理演示 4.CGLib 依赖如下: <groupId>cglib <artifactId>cglib <version>3.3.0 ...
Java代理是一种设计模式,它允许我们在不修改原始代码的情况下,为已有对象添加额外的功能或行为。在Java中,代理主要有两种实现方式:静态代理和动态代理。 ### 静态代理 静态代理是最基础的形式,它需要我们手动...
在Java中,爬虫通常基于HTTP或HTTPS协议,通过发送GET或POST请求到目标网页来获取HTML源代码。`MeiYun.java`可能定义了一个类,用于处理网络请求和解析返回的HTML内容。可能使用了诸如`HttpURLConnection`或者第三方...
在Java编程中,代理模式是一种设计模式,它允许我们在不修改原有对象的基础上,为对象添加新的功能或行为。代理模式通常用于控制访问、增加额外的处理逻辑或提供一种替代的接口。Java提供了两种主要的代理实现方式:...
Java动态代理和反射是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行方面发挥着关键作用。本文将通过实例演示这两种技术,并详细解释它们的工作原理。 首先,我们来了解一下Java动态代理。动态代理主要...
Java注解、反射、动态代理demo
在这个"java网页爬虫demo"中,我们重点关注的是使用Java语言实现的一个完整示例。主类是"SpiderWidth.java",这表明该程序的核心逻辑在其中。 首先,我们要理解Java爬虫的基本构成。一个简单的Java爬虫通常包括以下...
但需要注意的是,它并不适合所有场景,特别是在高并发和大流量的情况下,可能需要考虑其他更高效的通信机制,如RMI的替代品如Java的JMS(Java Message Service)或者更现代的HTTP/2和WebSocket协议。
静态代理和动态代理是两种常见的代理模式,它们在Java中有着广泛的应用,特别是在SpringBoot等框架中。本资源提供了一个简单的Java实现,适用于JDK1.8版本,并经过了验证,对初学者理解设计模式具有指导意义。 静态...
Java动态代理是Java编程中一个非常重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以代替原对象执行某些额外的操作,而无需修改原对象的代码。动态代理在AOP(面向切面编程)中广泛应用,如日志记录、...
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式;行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
在"AOP 动态代理demo"项目中,我们可以预期看到以下几个方面的内容: 1. **代理对象的创建**:无论是JDK动态代理还是CGLIB,都需要创建代理对象。对于JDK动态代理,这通常涉及到`Proxy.newProxyInstance()`方法的...