我如何将 Charles 与 IntelliJ 连接起来?

How do I hook up Charles with IntelliJ?

我正在使用 IntelliJ, and I would like to monitor all my http/https requests using Charles 在 Java 中编写 Web 应用程序,但是默认情况下我的请求不会显示,所以我怀疑双方都需要设置一些代理设置.有人可以详细解释一下吗? 非常感谢!

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

JVM 代理

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

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

HTTPS

下一个问题是,除了此代理,还必须提供证书,以便捕获和查看解密的 https 请求。

我们可以通过转到工具 > 选项 > HTTPS > 解密 HTTPS 流量来生成 Fiddler 证书。生成的证书可以从 http://127.0.0.1:8888/ 下载。

使用 JVM 的密钥工具,我们可以使用我们的证书创建一个新的密钥库,我们稍后可以将其用作 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"

此答案基于以下博客 post 和 Whosebug 答案:

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

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

  1. 导出 Charles 代理根证书。

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

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

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

转到 IntelliJ 中的编辑配置以确认在 运行 时使用的 SDK。

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

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

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

我将在下面描述细节:

1 为 jvm 安装证书

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

Help -> SSL Proxying -> Install Charles Root Certificate In Java VMs

如下图所示:

注意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