Migrating from Charles Proxy
A map of Charles's tools onto Solpuga's and how to carry a recorded session over as HAR: what travels, what is lost, and the limits.
What maps to what
Charles puts everything under Tools; Solpuga has some of it under Tools and some in the request list itself. Where there is no equivalent, the cell is a dash.
| Charles | Solpuga |
|---|---|
| Map Local | Map Local |
| Breakpoints | Breakpoints |
| SSL Proxying exclusions | Exclusion list |
| Client Process | Originating application |
| Export Session → HAR | HAR 1.2 export |
| Import Session → HAR | HAR import, read-only |
| The host tree | Grouping by host and application |
| Filter | Search and filters |
| Timing | Per-phase timing |
| WebSocket | Partly: messages recorded, none sent |
| Map Remote | — |
| Rewrite | — |
| Throttling | — |
| Repeat, Repeat Advanced, Compose | — |
| DNS Spoofing, Mirror, Auto Save, Block List | — |
| HTTP/2 | — |
| Scripting | — |
Carrying sessions over as HAR
Charles's own .chlz is readable by nothing else, so HAR is the route:
Charles has exported it since 3.6, and Solpuga opens it.
In Charles. File → Export Session… → format HTTP Archive (.har) →
save. For part of a recording: select the requests and
File → Export Selected Session….
In Solpuga. Tools → import HAR (Cmd/Ctrl + Shift + I), or open the
.har from your file manager. It opens in a separate read-only window with
its own list and inspector, so a live capture is untouched — you can read
somebody else's session without stopping your own.
One limit: files over 500 MB are refused. A day-long Charles session passes that easily, so export a selection rather than everything.
What comes across
Request and response headers, bodies, statuses and timings — everything HAR 1.2 describes. The imported window uses the same inspector as a live capture: JSON folds into a tree, images show their dimensions, binary shows as hex. Bodies and raw messages can be saved to files.
What is lost
These are limits of the format, not of anybody's implementation:
- Rules. Map Local, Rewrite, breakpoints and filters are not in HAR at all — the format describes traffic, not settings. Rules have to be recreated, and the fastest way is from a captured request: the rule is filled in with the response that actually arrived.
- WebSocket. HAR has nowhere to put it.
- Binary request bodies. Solpuga leaves them out of its own export and flags them with a comment; other exporters have size limits of their own.
- Unfinished requests. Solpuga's export omits them, and failed ones go out
with status
0. - Double decompression. Bodies in Solpuga's HAR are decrypted and
decompressed, while the response headers are kept as they arrived. An importer
that believes
Content-Encodingwill try to decompress a second time. Text opening as garbage is this, not a broken file.
What you get instead
An interface in English and Russian, and a free tier with no time limit.