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("},{", "}

{");
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 + "
");
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 }
CharlesUrlDecode.java
 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 }
CharlesUrlDecodeText.java
 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 }
CharlesUrlDecodeTextComponent.java

 主入口popview类 -此代码是修改

  根据度娘上所有文档,都自动屏蔽了popview类的新增此处鄙视他们一下)导致很多人入坑, 即使build成功,把class文件更新到jar包中,也没有出现 URL Decode 功能选项

IDEA  Build项目 

  1.  新建一个java项目  test123
  2. 创建和charles相同的代码路径 以下是例子:
    1. test123/src/com/xk72/charles/gui/transaction/actions/CharlesUrlDecode.java
    2. test123/src/com/xk72/charles/gui/transaction/popups/TransactionViewerPopupMenu.java
  3. 打开 File --> Project Structure      这里有不懂的可以百度下 如何导入jar包 build项目可能在编译过程中说  IDEA版本太低,下载对应高版本的IDEA版本      
    1. Project 选择对应的jdk版本
    2. Modules   --->导入项目
    3. Libraries  ---> 导入Charles.jar包 
  4. 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 包更新

  1. 新建一个文件夹 new ,在文件夹中创建和 charles对应的目录  比如 cd new  &&   mkdir -p com/xk72/charles/gui/transaction/actions
  2. 把编译好的class文件 拷贝到 对应文件夹中
  3. 使用  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

                     

        

原文地址:https://www.cnblogs.com/Baylor-Chen/p/14963207.html