Proxyman for QA: guide to inspecting and rewriting HTTP traffic
HTTP/HTTPS traffic between an app and a server is the single biggest source of mobile bugs that are hard to reproduce: analytics, IAP, ads, remote config, A/B tests, push notifications. If you only test โvia the UIโ, you see half of the picture. Proxyman is a macOS app that intercepts, displays and lets you modify this traffic in real time. Itโs a must-have for mobile QA.
What is Proxyman
A local HTTP proxy with a GUI. You run it on your Mac, it captures traffic from the Mac itself and from any device connected to the same Wi-Fi (iOS, Android, simulators). It sees the contents of every request, including HTTPS โ once you install the CA certificate.
Effectively an analogue of Charles Proxy and mitmproxy, but with a modern UI and a focus on native mobile development. proxyman.io.
Why mobile QA needs it
- See what the app actually sends to the server: analytics events, IAP receipts, ad impressions, remote config requests.
- Rewrite server responses (Map Local) โ test the UI against configs that donโt yet exist in production.
- Throttle the network โ check how the game behaves on 3G/2G/packet loss.
- Set a breakpoint on a request โ change status code 200 โ 500 on the fly to test error handling.
- Export a request as
curlโ paste into a bug report so a developer can reproduce in one command. - Diff between builds โ what changed in API calls between 1.5 and 1.6.
Installation
On the Mac
- Download from proxyman.io/download (the free tier covers 90% of QA needs; Pro is a one-time $69).
- On first run it asks to install a self-signed CA certificate โ accept and set it to Always Trust in Keychain.
- Menu Certificate โ Install Certificate on this Mac โ enter password.
Connect an iOS device
- In Proxyman: Tools โ iOS Device โ Setup โ youโll see the IP and port (usually 9090).
- On the iPhone: Settings โ Wi-Fi โ info icon for the current network โ Configure Proxy โ Manual โ enter IP and port.
- Open Safari on the phone, go to
http://proxy.man/sslโ a profile downloads. - Settings โ General โ VPN & Device Management โ install the profile.
- Important: Settings โ General โ About โ Certificate Trust Settings โ enable the toggle for the Proxyman CA. Without this, HTTPS wonโt decrypt.
Connect an Android device
- Same proxy in Wi-Fi settings.
- Download the certificate from
http://proxy.man/ssl. - Settings โ Security โ Install certificate โ CA certificate.
- For Android 7+, regular user-installed certificates donโt work for an app unless the app is a debug build. You need
network_security_config.xmlin the manifest withtrust-anchorsfor user CAs. If your app doesnโt have that โ ask the devs to add it to the debug variant. - For emulator: launch with
emulator -http-proxy http://<mac-ip>:9090.
Key features
SSL Proxying โ HTTPS decryption
By default Proxyman shows HTTPS requests with a โgreen lockโ โ encrypted. To see the contents โ right-click the domain โ Enable SSL Proxying. Doing this for all domains is a bad idea (system services will flood your log). Enable it selectively: your API, analytics, ads.
Map Local โ rewrite response with a local JSON
The most useful feature for QA. Workflow:
- Capture the request (e.g.
GET /api/levels-config). - Right-click โ Tools โ Map Local.
- Point to a local JSON file that Proxyman will return instead of the server response.
Use case: the devs havenโt deployed the new config format yet, but you want to verify that the UI renders it correctly. Write the JSON, map it, test โ without dependency on the backend.
Map Remote โ redirect to another URL
Rewrites the request URL. Use case: your dev build hits production API by default, but you need staging. No rebuild โ just add a rule.
Breakpoint โ pause mid-request
The request โhangsโ before being sent (Request Breakpoint) or before the response is received (Response Breakpoint). A window opens where you edit headers, body, status code, then click Execute. Use case: verify the app correctly handles 401 / 500 / timeout / empty response โ without involving the backend team.
Network Conditioner โ simulate poor connectivity
Tools โ Network Conditions โ choose a profile: 3G, Edge, 5% packet loss, high latency. Use case: verify the game doesnโt freeze when the connection drops mid-level-load and shows a proper retry popup instead.
Composer โ send custom requests
A Postman-like tool inside Proxyman. Use case: take a real request from the session โ duplicate โ change one parameter โ send โ see the response. Test API edge cases without needing the app.
Compare Flows โ diff requests
Pick two request/response pairs โ Compare. Get a line-by-line diff. Use case: what changed between builds 1.5 and 1.6 in analytics events. What the devs accidentally added or removed.
Scripting โ run JavaScript on every request
A Pro feature. Write a JS script applied to request or response: modify headers automatically, measure latency, log specific fields. Use case: an automated test that โno analytics is sent before user consent is grantedโ.
QA workflow: reproducible bug in 5 minutes
Typical scenario with a mobile game:
- Connect iPhone to Proxyman, enable SSL proxying for the analytics and IAP domains.
- Reproduce the bug โ e.g., after buying a booster, the HUD counter doesnโt update.
- In Proxyman find the request
POST /v1/iap/verifyโ response is 200 OK, but JSON contains"granted": false. - Right-click โ Copy as cURL โ paste into the bug report.
- Optional: Save Session โ export a
.prxsessionfile and attach to the ticket. The developer opens it locally and walks through it step by step.
Without Proxyman this bug becomes a multi-hour dance with logs and stacktraces. With Proxyman โ diagnosis in 5 minutes.
Tips & tricks
- Allow list of domains. Filter out everything unrelated to your app (macOS system updates, iCloud, AppStore, Spotlight). View โ Filter Bar โ type the domain. Instantly readable.
- Save sessions for every reproduced bug. The file is light, lives locally, can be opened months later.
- The certificate expires after a year. If one day HTTPS stops decrypting โ regenerate the CA in Proxyman: Certificate โ Generate New CA โ reinstall on devices.
- Custom Note on a flow. Mark weird requests with text like โbug about double-chargeโ โ easier to search later.
- Multiple tabs (Pro). Keep one tab for the main app, another for a specific flow like onboarding.
When Proxyman doesnโt fit
- Non-HTTP traffic (TCP, UDP, WebSocket-binary, raw gRPC) โ Wireshark is better.
- Cross-platform team (Windows/Linux): Proxyman is Mac-only. Alternatives are Charles Proxy (also Mac-only), mitmproxy (CLI, cross-platform), Fiddler (Windows).
- Production devices where you canโt install a CA certificate โ no proxy can decrypt HTTPS, physics says so. Debug builds or freshly-built TestFlight versions only.
Alternatives and comparison
- Charles Proxy โ old standard, exists since 2002. More cluttered UI, slightly less convenient for mobile development. $50.
- mitmproxy โ open-source, CLI + web UI, cross-platform. Powerful for Python scripting, but a higher learning curve.
- Fiddler โ Windows-oriented, Telerik. Fiddler Everywhere exists for Mac, but is less mature.
- Wireshark โ low-level network analyzer. Doesnโt handle HTTPS out of the box. For anything that isnโt HTTP โ itโs the tool.
For casual mobile QA on Mac โ Proxyman is optimal. For aggressive automation in CI โ mitmproxy.
Where to start
- Install Proxyman on your work Mac.
- Connect a test iPhone, catch the first HTTPS request from your app.
- Make one Map Local change โ for example, substitute a feature flag in remote config response โ see how the UI behaves.
- Enable Network Conditioner with a 3G profile for 5 minutes โ youโll discover a pile of small UX issues.
Documentation: docs.proxyman.io โ official docs. proxyman.io โ main site, downloads, licenses.