Charles添加URL Decode功能
如果你只是单纯的为了使用,那么请看这里,直接下载 安装,替换 charles.jar包即可
链接: https://pan.baidu.com/s/1LW2kiwx4ms4w-L9YW9hO1A 密码: cs1d
闲话不多说,直接上手艺!!!!
相信你已经在网上看到各种关于 Charles 添加 URL Dedode 功能的文档,场景描述和调研我就不细讲了,charles.jar 包如何拿到你也了解
以下是具体思路如何通过gui 反编译拿到java源码, 通过 IDEA 新建java项目 添加jar包build 成 .class源码,通过命令jar -uvf 更新到 Charles.jar包中
准备工具
下载 jd-gui 地址
- 怎么把.class转成.java文件呢?也是在jd-gui文件里面。点击要转的文件,然后file-->save Source如下图:
保存后就是.java文件了。当然可以直接保存整个jar包,也可以是单个文件
URL Decode功能代码 -以下代码都需要新建
1 package com.xk72.charles.gui.transaction.actions; 2 import com.xk72.charles.CharlesContext; 3 import javax.swing.*; 4 import javax.swing.text.JTextComponent; 5 import java.awt.*; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.KeyEvent; 8 import java.awt.event.KeyListener; 9 import java.net.URLDecoder; 10 11 public abstract class CharlesUrlDecode extends AbstractAction { 12 private final Component source; 13 14 protected CharlesUrlDecode(Component paramComponent) { 15 super("URL Decode"); 16 this.source = paramComponent; 17 } 18 protected abstract String getBody(); 19 20 21 public void actionPerformed(ActionEvent paramActionEvent) { 22 try { 23 24 String urlDecode = URLDecoder.decode(getBody(), "utf-8"); 25 urlDecode = urlDecode.replace("},{", "}\n\n{"); 26 WaringDialog("URL Decode Result",urlDecode); 27 28 } catch (Exception exception) { 29 CharlesContext.getInstance().error("Failed to url decode. Probably not valid"); 30 } 31 32 } 33 //避免影响原功能,所以新弹出一个窗口展示结果更为合适 34 public void WaringDialog(String title,String content) { 35 JFrame JFrame = new JFrame(title); 36 JFrame.setPreferredSize(new Dimension(800, 500)); 37 JTextArea textArea = new JTextArea(); 38 textArea.setText(content + "\n"); 39 textArea.setLineWrap(true); 40 textArea.setWrapStyleWord(true); 41 42 JScrollPane jScrollPane = new JScrollPane(textArea); 43 jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 44 45 jScrollPane.setAutoscrolls(false); 46 JFrame.setContentPane(jScrollPane); 47 JFrame.pack(); 48 JFrame.setVisible(true); 49 } 50 51 }
1 package com.xk72.charles.gui.transaction.actions; 2 import java.awt.Component; 3 4 public class CharlesUrlDecodeText extends CharlesUrlDecode { 5 6 private final String text; 7 8 public CharlesUrlDecodeText(String str) { 9 super(null); 10 this.text = str; 11 } 12 13 public CharlesUrlDecodeText(String str, Component component) { 14 super(component); 15 this.text = str; 16 } 17 18 protected String getBody() { 19 return this.text; 20 } 21 }
1 package com.xk72.charles.gui.transaction.actions; 2 import javax.swing.text.JTextComponent; 3 4 public class CharlesUrlDecodeTextComponent extends CharlesUrlDecode { 5 private final JTextComponent component; 6 7 public CharlesUrlDecodeTextComponent(JTextComponent jTextComponent) { 8 super(jTextComponent); 9 this.component = jTextComponent; 10 } 11 12 protected String getBody() { 13 String selectedText = this.component.getSelectedText(); 14 return selectedText == null ? this.component.getText() : selectedText; 15 } 16 17 }
主入口popview类 -此代码是修改
根据度娘上所有文档,都自动屏蔽了popview类的新增(此处鄙视他们一下)导致很多人入坑, 即使build成功,把class文件更新到jar包中,也没有出现 URL Decode 功能选项
IDEA Build项目
- 新建一个java项目 test123
- 创建和charles相同的代码路径 以下是例子:
- test123/src/com/xk72/charles/gui/transaction/actions/CharlesUrlDecode.java
- test123/src/com/xk72/charles/gui/transaction/popups/TransactionViewerPopupMenu.java
- 打开 File --> Project Structure 这里有不懂的可以百度下 如何导入jar包 build项目可能在编译过程中说 IDEA版本太低,下载对应高版本的IDEA版本
- Project 选择对应的jdk版本
- Modules --->导入项目
- Libraries ---> 导入Charles.jar包
- build过程中可能会报错, class类文件具有错误的版本52.0,应为50.0,查看自己的jdk版本,Project 下载报错的对应jdk版本,以下是版本对照
J2SE 8 = 52, J2SE 7 = 51, J2SE 6.0 = 50, J2SE 5.0 = 49, JDK 1.4 = 48, JDK 1.3 = 47, JDK 1.2 = 46, JDK 1.1 = 45
打包后效果图-如果实在不懂,可以问下java开发 --这里可能java 基础不好的同学费点事,其实这里懂了以后,发现很简单
jar 包更新
- 新建一个文件夹 new ,在文件夹中创建和 charles对应的目录 比如 cd new && mkdir -p com/xk72/charles/gui/transaction/actions
- 把编译好的class文件 拷贝到 对应文件夹中
- 使用 jar uvf 更新到charls.jar 包中 jar -uvf charles.jar com/xk72/charles/gui/transaction/actions/CharlesUrlDecode.class
实践
点击该选项后,会将转码的结果用一个新的pop弹窗来展示
总结
整个过程相对来说比较顺利,每天吃完晚饭后,每天2-3个小时研究,中间也踩到了坑,坑都在上面有详细的说明,因为我主语言不是java,所以比较慢
不过也用了不到俩周时间搞定 ,希望下个你看到对你有所帮助,这是我很大的荣幸!记得点赞,留言多夸我,哈哈哈!
有任何不明白可以留言,看到会回复,要是嫌麻烦,你可以留下联系方式, 我可以发给你编译后的charle.jar包,因为没找到上传附件的地方 ,我用的 charles 版本 4.6.1
链接: https://pan.baidu.com/s/1LW2kiwx4ms4w-L9YW9hO1A 密码: cs1d
posted on 2021-07-02 14:39 Baylor_Chen 阅读(948) 评论(4) 编辑 收藏 举报