常见问题解答
常规问题
某些系统硬编码为不对本地主机流量使用代理,因此当您连接到http://localhost/时,它不会出现在Charles中。
解决方法是改为连接到http://localhost.charlesproxy.com/。该地址指向IP地址127.0.0.1,因此应与localhost功能相同,但优势在于它会通过Charles。无论Charles是否运行或您是否使用Charles,此方法都有效。如果您使用不同的端口(例如8080),只需像往常一样添加,例如localhost.charlesproxy.com:8080。
您还可以在该域名前添加任何内容,例如myapp.localhost.charlesproxy.com,它也将始终解析为127.0.0.1。
或者,您可以尝试在localhost后添加“.”,或用您的计算机名称替换localhost,或使用本地链接IP地址(例如192.168.1.2)。
如果Charles正在运行并且您使用Charles作为代理,您还可以使用local.charles作为localhost的替代。请注意,这仅在您使用Charles作为代理时有效,因此除非您特别希望在不使用Charles时请求失败,否则上述方法更可取。
请检查服务器是否正确设置了字符编码或字符集,否则Charles会猜测,可能猜错。
您可能还需要选择能够显示响应中字符集的字体。您可以在“用户界面”选项卡的首选项中更改使用的字体。更改后需要重启Charles才能生效。
Charles启动失败,提示“Failed to find Java VM”
Charles使用Java,因此您需要安装Java运行时环境(JRE)。您可以从Oracle下载Java。
如果您使用32位版本的Charles,必须安装32位JRE;反之,如果您使用64位版本的Charles,必须安装64位JRE。
如果您已安装正确的JRE但仍收到“Failed to find Java VM”消息,请尝试重新安装Java——如果Charles找不到您的JRE,可能是您的注册表中包含一些无效信息,重新安装会纠正此问题。另外请注意,Charles需要JRE,如果仅安装了JDK,它将无法运行。安装JDK时通常会提供安装JRE的选项,因此通常这不是问题。
可能是您的浏览器代理设置已更改为使用Charles,但由于某些原因未更改回来。
首先尝试正常启动和退出Charles,看看是否能解决问题。因为如果Charles异常停止(如崩溃),它没有机会重置您的代理设置。重新启动时应能注意到此问题。
如果无效,您需要手动修复代理设置。具体操作取决于配置错误的应用程序:
Windows / Internet Explorer
首先退出Charles。然后转到控制面板中的Internet选项。转到“连接”选项卡,点击“局域网设置”。您会看到一个代理面板。取消选中“使用代理服务器”复选框。点击“确定”直到关闭Internet选项。
Mac OS X
打开系统偏好设置,进入“网络”偏好设置。选择适当的网络端口(如果有多个,可能需要重新配置多个),点击“配置”。转到“代理”选项卡。查看代理服务器列表,您会看到“网页代理”和“安全网页代理”处于活动状态。取消选中这些或根据您的网络需求重新配置。点击“立即应用”然后关闭网络偏好设置。
Firefox
首先退出Charles。然后打开Firefox偏好设置窗口,在“常规”选项卡中点击“连接设置”。选择“直接连接到互联网”或输入您的网络所需的代理设置。点击“确定”然后关闭偏好设置窗口。
崩溃情况幸运地很少见!以下是可能导致崩溃的原因,或有助于我诊断并希望解决问题的信息...
已知问题
以下是我已知的Charles可能存在的问题及推荐解决方案:
NOD32 IMON
如果您运行NOD32防病毒软件并启用其IMON服务,可能会遇到Charles崩溃——Charles可能前一秒还在正常运行,下一秒就消失了,导致浏览器代理设置未恢复(幸运的是重新启动Charles可以修复此问题)。
目前NOD32没有修复方案,因此您需要禁用IMON或将Charles排除在外。后者是首选方案,因为您可以继续受益于IMON——尽管您可能还会发现它干扰其他应用程序。
将Charles排除在IMON之外
我们需要将Charles添加到排除列表中。Charles是Java应用程序,因此将Charles.exe应用程序添加到排除列表无效:您需要将JRE目录中launch4j-tmp目录内的Charles.exe添加到排除列表。
打开NOD32控制中心,点击IMON,点击“设置”按钮进入IMON设置。
转到“其他”选项卡,找到“排除”面板。点击“排除”面板中的“编辑...”按钮。将出现“排除应用程序”对话框。
点击“添加...”按钮。找到您的Java安装目录。通常位于C:Program FilesJavajre*,其中*是版本号。如果安装了多个JRE,请检查Charles使用的版本(使用“帮助”菜单中的“关于Java”)。在JRE文件夹中会有一个launch4j-tmp文件夹,其中包含需要排除的Charles.exe。
报告崩溃
如果您的未在上述问题中描述,请向我报告。以下信息将有助于诊断问题:
- 您的操作系统名称和版本(例如Windows XP SP2)
- Charles运行的Java版本,如“帮助”菜单中的“关于Java”所示
- 查找Charles目录中创建的Java崩溃日志(例如C:\Program Files\Charles),它们将命名为hs_err_pid###.log。请将其中一个日志复制并粘贴到邮件中。
最后通过联系页面将所有信息发送给我。
Charles支持NTLM身份验证网站。您可以通过Charles访问NTLM身份验证网站而不会出现问题。
NTLM身份验证也称为“Windows NT挑战响应”和“集成Windows身份验证”,主要与IIS一起使用。
注意:要通过Charles使用NTLM身份验证,必须使用HTTP 1.1。有关配置浏览器使用HTTP 1.1的更多信息,请参阅相关文档。
Mac OS X上的Adobe Flash未使用Charles
不幸的是,Mac OS X上的Flash存在问题。它不使用操作系统代理设置,并且似乎没有提供自己的代理设置。因此,当您在创作环境或独立运行Flash影片时,它们不会使用Charles。
但是,如果您在浏览器中运行Flash影片,它将使用正确的代理设置并使用Charles。
此问题的可能解决方法是使用Charles的反向代理功能,以便您可以使连接的URL实际通过Charles(例如http://localhost:12345/).
Windows Vista上出现“Resource temporarily unavailable”错误
如果您在使用Charles时看到以下错误消息:
Resource temporarily unavailable: recv failed
尝试关闭您帐户上的“家长控制”以允许Charles运行。
记录一段时间后,Charles将耗尽可用内存。要释放内存,您应清除当前会话。
如果经常内存不足,可以增加默认堆大小。
Windows
编辑C:Program FilesCharlesCharles.ini并将vm.heapsize.preferred更改为更大的数字。确保不要删除数字周围的任何字母或符号!
Mac OS X
在应用程序文件夹中找到Charles.app,右键点击并选择显示包内容。打开“Contents”文件夹并用文本编辑器(如Text Edit)打开Info.plist。找到VMOptions并更改-Xmx256m中的数字。确保不要删除数字周围的任何字母或符号!
Linux
编辑charles.sh文件并更改-Xmx256m中的数字。确保不要删除数字周围的任何字母或符号!
尝试在建立VPN连接之前启动Charles。如果在VPN运行时退出并重新启动Charles,可能需要断开并重新连接VPN。
Charles在“概述”选项卡上显示每个请求的延迟测量值。Charles通过测量从完成发送请求到开始接收响应之间的时间来计算延迟。因此延迟包括网络延迟和服务器延迟,即处理请求所花费的时间。
对于静态请求,服务器通常能够立即响应(除非负载过重),因此延迟值主要代表网络延迟。
对于动态请求或任何需要服务器进行处理的请求,您可以减去近似的网络延迟以确定服务器处理请求所花费的时间。
SSL
Charles 3.4更改了SSL的默认行为,从“选择退出”变为“选择加入”。您现在必须为每个希望启用SSL代理的站点选择加入。此更改是为了改进Charles的行为。计算机上有许多应用程序需要SSL连接,并且会被Charles用于SSL代理的SSL证书混淆。此外,默认对所有站点启用SSL代理可能会给Charles用户带来无意的安全问题,例如如果您的网上银行站点被代理,您的密码将以明文形式显示在Charles中。
此更改意味着您现在需要告诉Charles要代理的每个SSL站点,或者您可以再次选择代理所有站点。
要为特定站点选择加入,右键点击树视图中的主机名并启用SSL代理。您可能需要重新启动浏览器以关闭其现有的非SSL代理连接。您还可以在“代理设置”对话框中控制SSL代理的主机列表。
要为所有站点选择加入,打开“代理设置”对话框,转到“SSL”选项卡,并在位置列表中输入*。
如果您使用Charles的SSL代理功能,会出现这些警告。您可以配置浏览器(或其他客户端应用程序)以信任Charles生成的SSL证书,或者您可以仅信任单个证书(如果浏览器或应用程序提供该选项)。
Chrome中本地主机SSL流量失败,提示ERR_CONNECTION_CLOSED
默认情况下,如果SSL证书无效,Chrome会拒绝所有本地主机流量。无效证书可能是由于不信任Charles SSL证书,也可能是由于您的本地主机服务器使用的SSL证书已过期或名称错误。
在另一个浏览器中检查连接和证书,因为其他浏览器不那么严格。
如果是此问题,建议修复证书问题——例如续订证书或向证书添加正确的通用名称。
您还可以更改Chrome中的设置,使其不再直接拒绝这些证书。转到chrome://flags/#allow-insecure-localhost并启用允许从本地主机加载的资源使用无效证书。
许可
要在安装期间部署许可证密钥,您需要将Charles首选项文件复制到适当的位置。请使用正确的许可证密钥配置Charles副本,然后将首选项文件复制为源文件。
请确保您的安装具有足够的Charles许可证。
Charles首选项文件在不同操作系统中的位置不同:
- Windows: %APPDATA%\Charles\charles.config
- Mac OS X: ~/Library/Preferences/com.xk72.charles.config
- Linux: ~/.charles.config
iOS
要在iPhone上将Charles用作HTTP代理,您必须在iPhone设置的Wi-Fi网络中手动配置HTTP代理设置。
转到“设置”应用,点击“Wi-Fi”,找到您连接的网络,然后点击蓝色披露箭头以配置网络。滚动到“HTTP代理”设置,点击“手动”。在“服务器”字段中输入运行Charles的计算机的IP地址,在“端口”字段中输入Charles运行的端口(通常为8888)。将“身份验证”保留为“关闭”。
现在,您iPhone上的所有网络流量都将通过Charles发送。首次从iPhone连接时,您应在Charles中看到提示,询问您是否允许该流量。
记住在停止使用Charles时禁用“设置”中的HTTP代理,否则您的应用程序中会出现令人困惑的网络故障!
模拟器
从Charles v3.9.3开始,“帮助”菜单中有一个项目“在iOS模拟器中安装Charles CA SSL证书”,它将自动在您的iOS模拟器中安装Charles的SSL CA证书。
或者,您可以更改代码以使NSURLConnection接受任何SSL证书。请参阅Stack Overflow上的问题和答案:http://stackoverflow.com/questions/933331/how-to-use-nsurlconnection-to-connect-with-ssl-for-an-untrusted-cert
如果您仅在Safari中浏览单个网站,可以在Safari中接受证书,这将对该站点有效。如果SSL站点仅用于加载资源(如图像),则需要直接访问它并接受证书才能工作。
设备
iOS 4及更高版本
在设备上,将HTTP代理设置为使用Charles,然后浏览到http://www.charlesproxy.com/getssl以安装证书。
SSL固定
请注意,某些应用程序实现了SSL证书固定,这意味着它们专门验证根证书。由于应用程序本身验证根证书,它将不接受Charles的证书并会失败连接。如果您已成功安装Charles根SSL证书并可以在Safari中使用SSL代理浏览SSL网站,但应用程序失败,则可能是SSL固定的问题。
在iOS设备上安装Charles的根SSL证书后,您将能够对应用程序使用SSL代理。从Charles 3.11.4开始,您现在可以在编译并在iOS 9上运行的应用程序中使用此功能,即使启用了应用程序传输安全(ATS)。
请注意,某些应用程序实现了SSL证书固定,这意味着它们专门验证根证书,并且无法与Charles一起使用。
如果您使用的是iOS 10.3或更高版本,需要额外步骤以信任Charles的根SSL证书。打开Settings.app并导航到General > About > Certificate Trust Settings,找到Charles Proxy证书,并启用它以完全信任(有关iOS 10中此更改的更多信息)。
如果您在使用自己的应用程序时继续遇到SSL代理问题,可以尝试禁用ATS。要禁用ATS,您需要向应用程序的Info.plist文件添加键,如下所示。有关更多信息,请参阅Apple的技术说明。
在发布应用程序之前,请记得重新启用ATS以利用ATS提供的安全性。
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
故障排除
Mac版Outlook与Charles不兼容。将您的邮件服务器主机名添加到“代理设置”的“绕过代理”文本区域中。例如,“mail.example.com”。这将配置您的系统在连接到邮件服务器时不使用Charles作为代理。