← Back to Blog

Charles Proxy for Mobile App Debugging: Complete Guide to Traffic Interception and HTTP/HTTPS Analysis

Charles Proxy is a powerful tool for intercepting and analyzing HTTP/HTTPS traffic of mobile applications. Learn how to configure it for debugging, testing, and working with proxies.

šŸ“…August 5, 2026
```html

You launch an application, and it behaves unpredictably: data does not load, ads do not display, the account gets banned for no apparent reason. To understand what is happening "under the hood," you need to see the actual HTTP requests between the application and the server. This is exactly what Charles Proxy is for — a tool that allows you to intercept, analyze, and modify the traffic of mobile applications in real-time.

In this guide, we will cover the complete setup of Charles Proxy for iOS and Android, working with HTTPS, modifying server responses, and integrating with external proxy servers — all without unnecessary theory, just practical information.

What is Charles Proxy and why is it needed

Charles Proxy is a desktop application for Windows, macOS, and Linux that acts as an HTTP/HTTPS proxy between your device (smartphone, emulator) and the internet. When you route traffic through Charles, the program records all requests and responses, allowing you to see every byte of data that the application sends to the servers.

Essentially, Charles does the same thing that DevTools in the Chrome browser does — only for mobile applications that do not have a built-in inspector. This is particularly important when you need to understand:

  • What parameters the application sends during account authorization or registration
  • What headers (User-Agent, Device-ID, tokens) are sent to the server
  • How exactly Facebook, TikTok, or Instagram verify the device upon login
  • Why the application returns an error under certain conditions
  • What data the marketplace sends when requesting prices or catalogs

For arbitrage specialists, Charles Proxy is an intelligence tool: you can literally see what fingerprint data Facebook Ads collects from the device and understand why the account gets banned right after logging in. SMM specialists use Charles to analyze the Instagram and TikTok APIs to understand limits and request patterns. Developers and testers use it to simulate server responses and check the application's behavior in non-standard situations.

Key Features of Charles Proxy:

  • Intercept HTTP and HTTPS traffic (including TLS 1.3)
  • View request and response bodies in a convenient format (JSON, XML, text)
  • Modify server responses (Rewrite, Map Local, Map Remote)
  • Breakpoints for manual editing of requests
  • Throttle connection to simulate slow internet
  • Record and replay sessions
  • Support for external proxies (HTTP, SOCKS5)

Installing and Initial Setup of Charles Proxy

Charles Proxy is distributed as a paid application with a 30-day trial period. You can download it from the official website charlesproxy.com. The version for macOS, Windows, and Linux is the same in functionality.

Step 1. Installing the Application

Download the installer for your operating system, run it, and follow the standard installation procedure. Once launched, Charles immediately starts listening on port 8888 on your computer. This is the default port through which devices will route traffic.

Step 2. Checking the Computer's IP Address

For the mobile device to connect to Charles, it must be on the same Wi-Fi network as the computer. Find out your computer's IP address on the local network:

  • macOS: System Preferences → Network → select Wi-Fi → IP address
  • Windows: Command Prompt → ipconfig → IPv4 address
  • In Charles itself: Help → Local IP Address

Remember this address — you will need it when configuring the proxy on your smartphone. It is usually something like 192.168.1.X.

Step 3. Allowing Connections from Devices

When the mobile device connects for the first time, Charles will show a dialog asking: "Allow connection from IP xxx.xxx.x.x?". Click Allow. If the window does not appear — check that the Windows or macOS firewall is not blocking Charles. On macOS, you may need to explicitly allow incoming connections in System Preferences → Security → Firewall.

Setting Up Charles Proxy for Android

The setup on Android consists of two parts: routing traffic through Charles and installing a certificate to decrypt HTTPS. Without the certificate, you will only see encrypted data — a useless string of characters.

Setting Up Wi-Fi Proxy on Android

  1. Open Settings → Wi-Fi
  2. Press and hold the connected network → Modify Network
  3. Enable Advanced Options
  4. In the Proxy field, select Manual
  5. Proxy host: your computer's IP address (e.g., 192.168.1.5)
  6. Port: 8888
  7. Save the settings

After this, all HTTP traffic from the device will go through Charles. Request logs will start appearing on the application screen.

Installing the Charles Certificate on Android

  1. On the device, open a browser and go to chls.pro/ssl
  2. The certificate file .pem will be downloaded
  3. Open Settings → Security → Install Certificate
  4. Select the downloaded file and install it as CA Certificate
  5. Give it any name, for example, "Charles SSL"

On Android 7 and above, applications do not trust user certificates by default. This means that system applications and most third-party applications (Facebook, Instagram, TikTok) will block interception. To work with such applications, you will need either root access or to use an Android emulator (e.g., Genymotion or Android Studio Emulator) that allows you to install the certificate in the system store.

āš ļø Important for Android 7+

Starting from Android 7 (Nougat), applications must explicitly declare trust in user certificates in the network_security_config.xml file. Most popular applications (Facebook Ads, Instagram) do not do this. For their analysis, use an emulator with root or a modified Android build.

Setting Up Charles Proxy for iOS

On iOS, the procedure is slightly easier — Apple provides a standard mechanism for installing certificates through profiles, and most applications respect system proxy settings.

Setting Up Wi-Fi Proxy on iPhone/iPad

  1. Open Settings → Wi-Fi
  2. Tap the (i) icon next to the connected network
  3. Scroll down to the HTTP Proxy section
  4. Select Manual
  5. Server: the IP address of the computer running Charles
  6. Port: 8888
  7. Authentication: off (if not set in Charles)

Installing the Charles Certificate on iOS

  1. On your iPhone, open Safari and go to chls.pro/ssl
  2. Safari will prompt you to install a configuration profile — click Allow
  3. Go to Settings → General → VPN & Device Management
  4. Find the Charles profile and click Install
  5. Enter the device's PIN if necessary
  6. Now go to Settings → General → About → Trust Certificates
  7. Enable the switch next to Charles Proxy CA

After this, Charles will be able to decrypt HTTPS traffic from most iOS applications. Exceptions are applications with Certificate Pinning — for example, banking applications and some versions of Instagram. Analyzing them will require a jailbreak and special tweaks like SSL Kill Switch.

Intercepting HTTPS Traffic: Configuring SSL Proxying

Even after installing the certificate, Charles does not decrypt HTTPS traffic by default — you need to explicitly specify which domains to enable SSL Proxying for. This is done intentionally to avoid cluttering the interface with unnecessary data.

How to Enable SSL Proxying

  1. In the Charles menu, select Proxy → SSL Proxying Settings
  2. Check the box Enable SSL Proxying
  3. Click Add in the Include section
  4. In the Host field, enter * (asterisk = all domains)
  5. In the Port field, enter 443
  6. Click OK and restart the interception

Now Charles will decrypt HTTPS traffic for all domains. If you are interested in a specific service — specify its domain instead of the asterisk. For example, to analyze Instagram, enter *.instagram.com, for Facebook — *.facebook.com.

What You See After Enabling SSL Proxying

In the left panel of Charles, you will see a tree of domains. Click on any request — detailed information will open on the right side: URL, method (GET/POST), request headers, request body (if any), and server response. The Request and Response tabs show the data in raw format or in a convenient formatted view (JSON, XML, HTML).

The request headers are particularly valuable — this is where authorization tokens, device identifiers, application version, and other data that platforms use for verification are transmitted. If you see suspicious parameters in requests to Facebook Ads or TikTok — this is the first step to understanding why the account gets banned.

Analysis Tools: Breakpoints, Rewrite, and Map Local

Charles is not just a traffic viewer, but also a powerful tool for modifying it. Three key tools that are used most often:

Breakpoints

Breakpoints allow you to intercept a request or response at the moment it passes through and manually edit the data before it reaches the recipient. This is a powerful testing tool: you can change request parameters, substitute another token, or modify the server response.

To set a Breakpoint: right-click on the request in the list → Breakpoint. Now, when the application accesses this URL next time, Charles will pause the transmission and open an editing window. You can change any parameter and click Execute to continue.

Rewrite — Automatic Data Substitution

Rewrite works automatically: you set a rule "if X appears in the request — replace it with Y," and Charles applies it to all matching requests without your involvement. This is convenient for mass testing: for example, to replace the value of a specific header in all requests to a particular domain.

Setup: Tools → Rewrite → Add → specify a name for the rule set → Add a rule → specify the type (Header, Body, URL, etc.), what to search for, and what to replace it with.

Map Local — Substituting Server Response with a Local File

Map Local allows you to replace the server response with the content of a local file. This is indispensable for testing applications without a real backend: you create a JSON file with the necessary data, and the application receives it instead of the actual API response.

Setup: Tools → Map Local → Add → specify the URL to intercept and the path to the local file. Now every request to this URL will return the content of your file. This allows testing edge cases: an empty product list, server error 500, non-standard data format.

Tool When to Use Difficulty
Breakpoints One-time manual editing of request/response Low
Rewrite Automatic replacement by rules Medium
Map Local Replacing API response with a local file Low
Map Remote Redirecting requests to another server Medium
Throttle Simulating a slow connection Low

How to Connect an External Proxy Server through Charles

Charles Proxy can work not only as a local interceptor but also as an intermediary between the device and an external proxy server. This is especially useful when you need to analyze traffic while routing it through a specific IP address — for example, to check how the application behaves when connected from another country or through a mobile IP.

This setup looks like this: Smartphone → Charles Proxy (computer) → External Proxy Server → Internet. You see all the traffic in Charles, but the requests are sent through the desired IP.

Setting Up an External Proxy in Charles

  1. Open Proxy → External Proxy Settings
  2. Check the box Use external proxy servers
  3. For HTTP traffic: enable Web Proxy (HTTP), enter the proxy host and port
  4. For HTTPS traffic: enable Secure Web Proxy (HTTPS), enter the same details
  5. If the proxy requires authentication — enter the username and password
  6. Click OK

Charles supports HTTP and SOCKS5 proxies. For SOCKS5, use the SOCKS Proxy tab in the same settings. If you are working with residential proxies with IP rotation — each new request will go through a different address, which is convenient for testing platform behavior when changing IPs.

Exclusions for Local Traffic

If you need some traffic to go directly (without the external proxy), add exclusions in the Bypass external proxies for the following hosts field. For example, local addresses localhost and 127.0.0.1 should usually be excluded to avoid breaking local services.

When an External Proxy is Needed in Charles:

  • Testing application geolocation (how it behaves from the USA, Germany, Brazil)
  • Checking content availability in different regions
  • Analyzing requests when working through mobile proxies — to understand how the platform reacts to mobile IP
  • Bypassing regional restrictions during testing

Practical Scenarios: Arbitrage, SMM, and Application Testing

Let's consider specific tasks for which Charles Proxy is used in real work — without unnecessary theory.

Scenario 1. Arbitrage — Analyzing Facebook Ads Fingerprint

One of the main tasks for an arbitrageur is to understand why Facebook bans accounts right after logging in. Charles allows you to intercept the first requests of the Facebook application during authorization and see what device data is sent to Meta servers.

In requests to graph.facebook.com, you will see parameters like device_id, hardware_id, advertiser_id, and other identifiers. This helps to understand which data needs to be isolated in anti-detect browsers like Dolphin Anty or AdsPower when working with multiple accounts.

It is also useful to intercept the server's response when banned — it usually contains an error code and sometimes the reason for the block, which Facebook does not show in the application interface.

Scenario 2. SMM — Studying Instagram and TikTok APIs

SMM specialists managing 10-50 client accounts often face platform limits: Instagram restricts the number of likes, follows, and comments per hour. Charles allows you to accurately measure these limits by intercepting requests while manually working with the account.

By intercepting requests to i.instagram.com, you will see the API structure: endpoints, parameters, authorization tokens. This helps to set up automation that mimics real user behavior and avoids getting blocked. The same works with TikTok — analyzing requests to api16-normal-c-useast1a.tiktokv.com shows what parameters the platform checks.

Scenario 3. E-commerce — Analyzing Marketplace APIs

Sellers on Wildberries, Ozon, and Avito actively use competitor price monitoring. Charles allows you to intercept requests from the marketplace's mobile application and see through which endpoints data about prices and stock is loaded. This helps to set up a parser that mimics the behavior of the mobile application — such requests pass much easier than requests from a browser parser.

For example, in the Wildberries application, you can intercept requests to catalog.wb.ru and see the exact structure of filtering and pagination parameters. This provides a ready template for building a parser that will bypass protection much more effectively than attempts to reproduce browser requests. For stable parsing, data center proxies with high speed and connection stability will be required.

Scenario 4. QA Testing of Mobile Applications

Testers use Charles to check the application's behavior in non-standard situations. With Map Local, you can substitute the server response with a 500 error and check how the application handles backend failures. Throttle allows simulating slow internet (3G, Edge) and checking if the application freezes during long loading times. Breakpoints allow you to manually change data and test edge cases — for example, what happens if the server returns an empty array instead of a product list.

Common Problems and Their Solutions

When working with Charles Proxy, beginners often encounter the same problems. Let's discuss the most common ones.

Problem 1: Charles shows "unknown" instead of HTTPS request content

Reason: SSL Proxying is not enabled or the certificate is not installed on the device.
Solution: Check that SSL Proxying is enabled in Proxy → SSL Proxying Settings and that the host *:443 is added. Ensure that the Charles certificate is installed on the device and that it is fully trusted (on iOS — through certificate trust settings).

Problem 2: Traffic is not intercepted, the request list is empty

Reason: The device is not routing traffic through Charles, or Charles is not accepting connections.
Solution: Check that the device and computer are on the same Wi-Fi network. Ensure that the correct IP address of the computer and port 8888 are specified in the device's proxy settings. Check that interception is enabled in Charles: Proxy → Start Recording (or the button with the red dot in the toolbar).

Problem 3: The application does not work when Charles is enabled

Reason: The application uses Certificate Pinning — it checks not only the trust chain but also the specific server certificate. The Charles certificate does not match the expected one.
Solution for Android with root: Install the Magisk module TrustUserCerts or use Frida to bypass SSL Pinning. For iOS with jailbreak — SSL Kill Switch 2. Without root/jailbreak, bypassing Certificate Pinning is extremely difficult.

Problem 4: Charles intercepts too much traffic, the interface is lagging

Reason: All traffic from all applications on the device is being recorded, including system services.
Solution: Use filtering. In the Filter field (at the bottom of the left panel), enter the domain of the service of interest. Or set up Access Control in Proxy → Access Control Settings so that Charles only accepts connections from specific applications via Proxy → Recording Settings → Include/Exclude.

Problem 5: No internet after closing Charles

Reason: The mobile device still has proxy settings, but Charles is no longer running — the traffic has nowhere to go.
Solution: Always remove the proxy settings on the device after finishing work with Charles. Set the proxy parameter to "None" or "Off" in the Wi-Fi settings.

Problem Quick Solution
HTTPS shows "unknown" Enable SSL Proxying + install the certificate
Request list is empty Check IP, port, and that Charles is in recording mode
Application does not open Certificate Pinning — root/jailbreak needed
Interface is lagging Add a domain filter in the Filter field
No internet after closing Remove proxy settings on the device

Conclusion

Charles Proxy is one of the most useful tools for anyone working with mobile applications: whether it's an arbitrage specialist wanting to understand the verification mechanisms of Facebook Ads, an SMM specialist studying the Instagram API, or a developer testing the behavior of their application in non-standard conditions. The installation takes 15-20 minutes, and the possibilities that open up after setup are hard to overestimate.

The main thing to remember is that Charles is a tool for analysis and debugging, not for anonymization. For working with multiple accounts, testing from different geolocations, or bypassing platform restrictions, a separate level of protection is needed — proxy servers with real IP addresses.

If you are analyzing mobile application traffic for arbitrage or working with social media accounts, we recommend combining Charles with residential proxies — they provide real IPs of home users, which minimizes the risk of bans during testing and working with accounts. For tasks where high speed and stability are important — for example, mass parsing of marketplace APIs — data center proxies with high uptime are suitable.

```