# proxyee **Repository Path**: zkyt/proxyee ## Basic Information - **Project Name**: proxyee - **Description**: HTTP proxy server,support HTTPS&websocket.MITM impl,intercept and tamper HTTPS traffic. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2020-04-24 - **Last Updated**: 2021-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### HTTP 代理服务器 支持HTTP、HTTPS、WebSocket,HTTPS采用动态签发SSL证书,可以拦截http、https的报文并进行处理。 例如:http(s)协议抓包,http(s)动态替换请求内容或响应内容等等。 #### HTTPS 支持 需要导入项目中的CA证书(src/resources/ca.crt)至受信任的根证书颁发机构。 可以使用CertDownIntercept拦截器,开启网页下载证书功能,访问http://serverIP:serverPort即可进入。 注:安卓手机上安装证书若弹出键入凭据存储的密码,输入锁屏密码即可。 #### 二级代理 可设置二级代理服务器,支持http,socks4,socks5。 #### 启动 ``` //启动一个普通的http代理服务器,不解密https new HttpProxyServer().start(9999); ``` ``` //启动一个解密https的代理服务器,并且拦截百度首页,注入js和修改响应头 //当开启了https解密时,需要安装CA证书(`src/resources/ca.crt`)至受信任的根证书颁发机构。 HttpProxyServerConfig config = new HttpProxyServerConfig(); config.setHandleSsl(true); new HttpProxyServer() .serverConfig(config) .proxyInterceptInitializer(new HttpProxyInterceptInitializer() { @Override public void init(HttpProxyInterceptPipeline pipeline) { pipeline.addLast(new FullResponseIntercept() { @Override public boolean match(HttpRequest httpRequest, HttpResponse httpResponse, HttpProxyInterceptPipeline pipeline) { //在匹配到百度首页时插入js return HttpUtil.checkUrl(pipeline.getHttpRequest(), "^www.baidu.com$") && isHtml(httpRequest, httpResponse); } @Override public void handelResponse(HttpRequest httpRequest, FullHttpResponse httpResponse, HttpProxyInterceptPipeline pipeline) { //打印原始响应信息 System.out.println(httpResponse.toString()); System.out.println(httpResponse.content().toString(Charset.defaultCharset())); //修改响应头和响应体 httpResponse.headers().set("handel", "edit head"); /*int index = ByteUtil.findText(httpResponse.content(), "
"); ByteUtil.insertText(httpResponse.content(), index, "");*/ httpResponse.content().writeBytes("".getBytes()); } }); } }) .start(9999); ``` 更多 demo 代码在 test 包内可以找到,这里就不一一展示了 #### 流程 SSL 握手  HTTP 通讯  #### 讲解 - [JAVA写HTTP代理服务器(一)-socket实现](https://segmentfault.com/a/1190000011810997) - [JAVA写HTTP代理服务器(二)-netty实现](https://segmentfault.com/a/1190000011811082) - [JAVA写HTTP代理服务器(三)-https明文捕获](https://segmentfault.com/a/1190000011811150) #### 感谢 [](https://www.jetbrains.com/?from=proxyee)