【问题标题】:How do I hook up Charles with IntelliJ?如何将 Charles 与 IntelliJ 连接起来?
【发布时间】:2018-04-06 05:14:09
【问题描述】:

我正在使用 IntelliJ 用 Ja​​va 编写一个 Web 应用程序,我想使用 Charles 监视我的所有 http/https 请求,但是我的请求默认情况下不显示,所以我怀疑某些代理两边都需要设置。有人可以详细解释一下吗? 提前非常感谢!

【问题讨论】:

  • 什么http请求?来自 intellij idea 本身,还是您的应用?
  • 我想监控我的应用发出的请求。但是,由于我只需要这个来进行测试,所以我更愿意在 IntelliJ 中设置这些代理配置,而不是在项目本身中。

标签: intellij-idea proxy charles-proxy


【解决方案1】:

好的,我已经设法理解了问题并解决了它。

JVM 代理

第一个问题是我的请求本质上来自 JVM,所以我们必须首先代理它们,这意味着必须进行 JVM 配置,可以作为参数提供(可以通过 CLI 或在 IntelliJ 中的 VM 选项 下),如下所示:

-DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888

HTTPS

下一个问题是,除了这个代理之外,还必须提供证书才能捕获和查看解密的 https 请求。

我们可以通过Tools > Options > HTTPS > Decrypt HTTPS traffic 生成 Fiddler 证书。生成的证书可以从http://127.0.0.1:8888/ 下载。

使用 JVM 的 keytool,我们可以使用我们的证书创建一个新的密钥库,稍后我们可以将其用作 JVM 配置来信任资源。为此,请运行以下命令(确保为密钥工具和证书提供正确的路径):

"C:\Program Files\Java\jdk1.8.0_144\bin\keytool.exe -import -file C:\Users\Username\Desktop\FiddlerRoot.cer -keystore FiddlerKeystore -alias Fiddler 提供密码后,将在C:\Windows\System32生成密钥库。

现在,我们可以通过以下方式向 JVM 提供这个密钥库和密码:

-Djavax.net.ssl.trustStore="C:\Windows\System32\FiddlerKeystore" -Djavax.net.ssl.trustStorePassword="yourKeyStorePassword"

此答案基于以下博客文章和 StackOverflow 答案:

【讨论】:

  • 这与 Charles Proxy 相同:设置 JVM 代理 (-DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888),然后在 Charles > Help > SSL Proxying > Instal Charles Root Certificate 中安装 Charles 证书。
  • 我没有找到在C:\Windows\System32生成的密钥库...有没有可能是在其他地方生成的?
【解决方案2】:

按照官方网站上的这些说明进行操作:

https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

  1. 导出 Charles Proxy 根证书。

  2. 将证书安装到您在 IntelliJ 中的应用程序正在使用的 Java 版本的 JVM 证书存储中。

    sudo keytool -import -alias charles -file ~/Desktop/charles-ssl-proxying-certificate.pem

我遇到的问题是 IntelliJ 运行“配置”(用于从 IntelliJ 内部运行 Java 应用程序)使用的 SDK 与实际的项目级 SDK 不同。

进入 IntelliJ 中的 Edit Configurations 以确认运行时使用的 SDK。

编辑:我还发现一些库(sp. Apache HttpClient)绕过了配置 SDK/Proxy 设置,导致来自 IntelliJ 的请求对 Charles Proxy 不可见。

【讨论】:

    【解决方案3】:

    Charles 已经支持 JVM 代理。所以你所要做的就是:

    1. 为 jvm 安装证书;
    2. 设置 jvm 代理;

    我将在下面描述细节:

    1 jvm 安装证书

    这可以通过以下方式完成:

    帮助 -> SSL 代理 -> 在 Java 虚拟机中安装 Charles 根证书

    如下图所示:

    注意Charles默认使用8888端口,如果你的代理端口不是8888,输入你自己的代理端口即可。

    2设置jvm代理

    你可以通过两种方式设置jvm代理,java代码或程序参数, 如下代码所示:

    // method 1: use the java code
    System.setProperty("http.proxyHost", "127.0.0.1");
    System.setProperty("http.proxyPort", "8888");
     
    // method 2:use the program arguments
    -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-02
      • 2021-02-23
      • 2020-05-12
      • 2019-07-16
      • 2010-11-17
      • 2021-09-15
      • 2020-08-18
      相关资源
      最近更新 更多