Charles Proxy — What It Is, Setup and Intercepting HTTPS Traffic

Author: IT Sectr Published: 2026-05-08 Reading time: 8 min

Charles Proxy is a cross-platform proxy server for debugging HTTP/HTTPS traffic, used by developers to intercept, view, and modify network requests. According to Karl von Randow, creator of the tool (2025), Charles has been used in more than 50,000 companies worldwide since 2004. The proxy supports intercepting traffic from mobile devices over WiFi, HTTPS proxying with root certificate installation, and a wide range of tools for API analysis.

Key Takeaways

  • Charles Proxy is an HTTP/HTTPS proxy server for intercepting and analyzing network traffic with advanced debugging capabilities
  • HTTPS Proxying is implemented by installing the Charles root certificate on the device, allowing encrypted traffic to be viewed
  • Rewrite and Breakpoints are powerful tools for modifying requests and responses on the fly without changing server or client code
  • Map Local and Map Remote allow replacing network resources with local files or alternative servers for testing
  • Throttle simulates slow and unstable network connections to test application behavior under poor connectivity

What Is Charles Proxy?

Charles Proxy is an HTTP proxy and HTTP monitor that acts as an intermediary between the client and the server. All requests and responses pass through Charles, allowing you to view their contents, analyze structure, modify data in real time, and simulate various network conditions. It is available for Windows, macOS, and Linux.

History and Positioning

Charles Proxy was created in 2004 by Karl von Randow and remains one of the most popular tools for debugging network traffic. Unlike free alternatives, Charles offers a paid license with a 30-day trial period. The tool is positioned as a professional solution for mobile app developers, web developers, and QA engineers who need full control over HTTP communications.

Platform Compatibility

Charles operates as a system proxy on your computer and can intercept traffic from any devices on the same network: Android, iOS, simulators, emulators, web browsers, and IoT devices. To intercept HTTPS, you need to install the Charles root certificate on each device. Traffic is supported on HTTP/1.1 and HTTP/2 (partial). HTTP/3 (QUIC) is not supported at the interception level.

How Charles Proxy Works

Charles operates on the principle of an MITM (Man-in-the-Middle) proxy: when a client sends a request through Charles, the tool intercepts the request, forwards it to the target server, receives the response, and passes it back to the client. All traffic passes through Charles, allowing it to be analyzed and modified.

Proxy Architecture

When launched, Charles creates a local HTTP proxy on port 8888 (default). The operating system or application is configured to use this proxy. All HTTP requests are sent to Charles first, which then acts as a full client to the target server. For HTTPS, Charles uses its own SSL proxying technique: it generates a certificate on the fly for each domain, signed by the Charles root certificate. If the root certificate is installed on the device as trusted, Charles can decrypt and view HTTPS traffic.

Operating Modes

Charles supports two modes: Proxy (classic proxy server) and SOCKS Proxy (for UDP and TCP traffic). Standard HTTP-proxy is used for web development. For mobile devices — configure WiFi Proxy on the device pointing to the IP address of the computer running Charles. macOS supports automatic proxy configuration for the iOS simulator.

xml
<!-- Configuring network_security_config.xml for Android with Charles support -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <!-- Trust Charles certificate in Debug build -->
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

Key Features of Charles Proxy

Charles Proxy provides a set of professional tools for analyzing and modifying traffic that go far beyond simple request interception.

Rewrite and Breakpoints

The Rewrite tool allows you to automatically change certain parts of requests or responses: headers, URL parameters, response body. For example, you can replace the User-Agent header with a value from another device or remove certain cookies. Breakpoints work like a debugger: the request stops at a selected stage (before sending or before receiving), and the developer can manually change its contents before it proceeds further. This is useful for testing handling of error responses or non-standard states.

Map Local and Map Remote

Map Local allows you to replace a network resource (CSS, JS, JSON) with a local file from disk. This is indispensable in frontend development: you can modify CSS/JS and see the result immediately without deploying to a server. Map Remote redirects requests from one URL to another — for example, from a production server to staging for testing. Both tools work with URL patterns supporting wildcards.

Throttle and Network Condition Simulation

The Throttle tool allows you to simulate various types of network connections using preset profiles: 3G, EDGE, GPRS, DSL, WiFi. You can configure speed limits (download/upload), latency, packet loss, and stability. This is critical for testing application behavior under slow or unstable connections — proper timeout handling, retry logic, offline mode.

ProfileDownloadUploadLatencyTypical Scenario
3G780 kbps330 kbps200 msTesting with weak mobile signal
EDGE130 kbps50 kbps400 msExtremely slow connection
GPRS50 kbps20 kbps500 msMinimum possible connection
DSL2 Mbps256 kbps50 msHome wired connection
WiFi10 Mbps10 Mbps10 msGood WiFi connection

Auto Save and Recording

Charles can automatically save traffic sessions to .chls files, allowing you to analyze them later or share with colleagues. Recording Control lets you flexibly configure which traffic to save: by domain, content type, or status code. This is convenient for long-term API monitoring.

Setting Up Charles Proxy for Mobile Devices

For debugging mobile app traffic, Charles is configured as a WiFi Proxy: all devices on the same network as the computer can route traffic through Charles. Correct HTTPS configuration requires installing the Charles certificate on the mobile device.

Setup on Android

For Android: open Settings → WiFi → Advanced → Proxy, select Manual, and enter the computer's IP address with port 8888. Then open a browser on the device and go to http://chls.pro/ssl to download the Charles certificate. On Android 7+ (API 24+), a network_security_config.xml is required to trust user certificates in Debug builds — otherwise the app may not route traffic through Charles.

Setup on iOS

For iOS: Settings → WiFi → configure proxy with IP and port 8888. Then Safari → http://chls.pro/ssl → install the certificate profile. On iOS 10.3+, you must additionally enable certificate trust: Settings → General → About → Certificate Trust Settings → enable Charles Proxy. iOS is stricter about certificates: some apps may use SSL Pinning, blocking traffic through Charles even with a trusted certificate.

Solving SSL Pinning Issues

If the app uses SSL Pinning (server certificate pinning), standard proxying through Charles will not work — the app will reject the Charles certificate. Solutions: disable SSL Pinning in Debug builds via OkHttp or URLSession settings, use Frida to bypass pinning at runtime, or use Android Emulator with root access.

Practical Use Cases for Charles Proxy

Charles Proxy solves specific development and testing tasks. Let's look at the most common scenarios where the tool is indispensable.

Debugging API Integration

The most common scenario — checking the correctness of API requests. Charles shows the exact request URL, headers, body, and parameters. If the server returns an unexpected response, you immediately see: JSON structure, error code, response headers. This lets you distinguish client-side errors from server-side errors without logs from both sides.

Testing with Slow Connection

Using Throttle profiles, you can test how the app behaves under low connection speed: whether a loading indicator is displayed, whether timeouts are handled correctly, whether the UI freezes on connection loss. It is especially important to test caching — if data has already been loaded, the app should show it from cache rather than entering an infinite loading state.

Editing Server Responses

Using Breakpoints, you can modify the server response before it is sent to the app. For example, return an empty array instead of data, change the status code to 500, add a new field to JSON. This allows you to test edge case handling without modifying server code — one of the most powerful uses of Charles in mobile development.

Frequently Asked Questions

Is Charles Proxy free?

Charles Proxy is a commercial product with a 30-day trial period. After the trial period ends, the program continues working but pauses for 30 minutes at each startup. A license costs $50 per copy. There are free alternatives such as Proxyman (macOS) and mitmproxy (cross-platform).

Can I intercept iOS simulator traffic?

Yes, the iOS simulator automatically uses the macOS system proxy. Simply start Charles and enable SSL proxying — all simulator traffic will be intercepted. Certificate setup for the simulator happens automatically; you only need to trust the Charles certificate in the macOS keychain.

How does Charles differ from Proxyman?

Main differences: Charles is cross-platform (Windows, macOS, Linux), Proxyman is macOS and iOS only. Charles has a broader set of tools (Rewrite, Map Local, Repeat, Auto Save) but is paid. Proxyman is free for basic features, with a modern interface and native iOS simulator integration.

How does Charles Proxy affect performance?

Charles adds latency when traffic passes through the proxy, especially with active SSL proxying (decryption/encryption). On modern computers, the delay is 5–15 milliseconds per request. For performance testing, it is recommended to disable SSL proxying for static content (CSS, JS, images) through Recording Control.

How to export a session from Charles?

Charles supports export to formats: .chls (native, for reopening in Charles), HAR (HTTP Archive, opens in browsers and other tools), CSV (for processing in Excel or spreadsheets), Trace (for exporting a specific request in curl-compatible format). Export via File → Export Session menu.

Summary

  • Charles Proxy is a professional HTTP/HTTPS proxy server for intercepting, viewing, and modifying network traffic since 2004
  • How it works — MITM proxy: all requests pass through Charles, allowing analysis and modification on the fly
  • Powerful tools: Rewrite, Breakpoints, Map Local, Map Remote, Throttle — for comprehensive API debugging and user experience testing
  • HTTPS Proxying requires installing the Charles root certificate on the device, and for Android 7+ — network_security_config.xml in Debug builds
  • Throttle profiles let you simulate 3G, EDGE, DSL and other connection types for testing app behavior in real-world conditions
  • Session export to HAR, CSV, and .chls formats for analysis, reporting, and sharing with the team
  • For projects with limited budgets, consider free alternatives: Proxyman (macOS) or mitmproxy (cross-platform open-source)

We will develop a mobile application turnkey

IT Sectr creates iOS and Android applications for startups and businesses since 2017. We will advise you and propose the best solution.

Discuss the project

Read also