我想使用 Charles 代理工具测试来自 android 设备的 Https 调用。我需要查看调试应用程序的原始请求/响应内容。我通过在“代理设置”-> SSL 选项卡下添加主机和端口来配置 Charles。当我运行该应用程序时,所有 SSL 调用似乎都从 Charles 中迅速消失。有没有人知道如何解决这个问题。Charles 文档似乎没有关于 Android 设备的信息。
9 回答
对于安卓7
请参阅: 如何让 charles 代理与 Android 7 nougat 一起工作?
适用于Android7以下的Android版本
在您的计算机上,运行 Charles:
在安卓手机中:
获取查尔斯 SSL 证书。从您的移动浏览器访问此网址:http: //charlesproxy.com/getssl
在“命名证书”中输入您想要的任何内容
接受安全警告并安装证书。如果您安装成功,那么您可能会看到这样的内容:在您的手机中,设置 -> 安全 -> 受信任的凭据:
完毕。
编辑 - 这个答案是针对早期版本的查尔斯。有关 v3.10.x 的正确步骤,请参阅下面的@semicircle21 答案——也比这种方法容易得多...... :-)
值得一提的是这里的分步说明。它们也应该同样适用于 iOS:
- 打开查尔斯
- 转到代理 > 代理设置 > SSL
- 勾选“启用 SSL 代理”</li>
- 选择“添加位置”并输入主机名和端口(如果需要)
- 单击确定并确保选中该选项
- 从这里下载 Charles 证书:Charles cert >
- 通过电子邮件将该文件发送给自己。
- 在您的设备上打开电子邮件并选择证书
- 在“命名证书”中输入您想要的任何内容
- 单击确定,您应该会收到一条消息,表明证书已安装
然后您应该能够在 Charles 中看到 SSL 文件。如果您想拦截和更改值,您可以使用非常棒的“Map Local”工具:
- 在查尔斯去工具>地图本地
- 选择“添加条目”
- 输入要替换的文件的值
- 在“本地路径”中选择您希望应用加载的文件
- 点击确定
- 确保已选择该条目,然后单击“确定”
- 运行你的应用
- 您应该在“注释”中看到您的文件加载而不是实时文件
感谢@bkurzius 的回答,此更新适用于 Charles 3.10+。(原因在这里)
- 打开查尔斯
- 转到代理 > SSL 代理设置...
- 勾选“启用 SSL 代理”</li>
- 选择“添加位置”并输入主机名和端口(如果需要)
- 单击确定并确保选中该选项
- 转到 Help > SSL Proxying >
Install Charles Root Certificate on a Mobile Device or Remote Browser...
,然后按照说明进行操作。(使用安卓浏览器下载并安装证书。) - 在“命名证书”中输入您想要的任何内容
- 单击确定,您应该会收到一条消息,表明证书已安装
看这里:
您需要将 charles.crt 证书安装到您的设备上。
我浪费了 1 天的时间来寻找问题,我的系统没有要求连接“允许”或“拒绝”。我虽然这是由于一些证书问题。尝试了上面提到的所有方法,但都没有奏效。最后我发现“防火墙是真正的罪魁祸首”。如果防火墙设置为 ON,他们将不允许 charles 通过代理 IP 与您的笔记本电脑连接。把它们关掉,一切都会顺利进行。不确定这是否是相关的答案,但只是想分享。
最受好评的答案运行良好(有点旧但仍在运行),但我只想提一下,自从 Android N 以来,我们都可以配置您的应用程序以获得差异信任 SSL 证书(仅用于发布、调试等) ,包括 Charles SSL 代理证书(如果您下载 Charles 证书并将 .pem 文件放在原始文件夹中)。更多信息可以在这里找到:https ://developer.android.com/training/articles/security-config.html
此外,Charles 的官方文档也可用于设置:https ://www.charlesproxy.com/documentation/using-charles/ssl-certificates/
希望这将有助于在您的应用项目中设置 Charles,而不是在每个 Android 设备上。
我想通了这个问题。这是因为 Charles 3.7 对 Android 设备有一些错误。我更新到 Charles 3.8 Beta 版本,似乎对我来说工作正常。
对于较新的模拟器,使用以下命令从命令行启动可能会有所帮助:
emulator -netdelay none -netspeed full -avd <emulator_name> -http-proxy http://<ip-address>:8888
确保您遵循上述@User9527 的建议以及其余设置
对我来说,问题是查尔斯告诉我在代理设置中路由到的 IP 地址不正确。为了解决这个问题,我最终进入ifconfig
了终端,并在端口尝试不同的 IP 地址(列在旁边inet
)以8888
获取当前活动连接