Wie ApiCatcher große Dateien über HTTP erfasst
Ich habe viele HTTPS-Debugging-Proxys für iOS ausprobiert, und keiner unterstützt die Erfassung statischer Dateien — genauer gesagt, sie verwerfen Anfragen, sobald der Body eine bestimmte Größe überschreitet. Es gab Situationen, in denen ich ein Berechtigungsproblem bei einem Datei-Upload untersuchen wollte und die vollständige Anfrage-URL erfassen musste, um die Domain und das Projekt zu identifizieren — aber selbst das war nicht möglich.
Während der Entwicklung von ApiCatcher haben wir herausgefunden, dass iOS eine Speicherbegrenzung für Netzwerkerweiterungsprozesse vorschreibt. Verschiedenen Quellen zufolge begrenzt das System diese Prozesse auf maximal etwa 50 MB Arbeitsspeicher; wird dieser Wert überschritten, wird der Prozess vom System beendet. Der tatsächliche Schwellenwert kann jedoch je nach Betriebssystemversion variieren — in unseren Tests lief der Prozess bei etwa 80 MB noch einwandfrei.
Aufgrund dieser Einschränkung implementieren die meisten Debugging-Proxys ihre eigene Verwerfungsstrategie und verwerfen Anfragen, deren Body eine bestimmte Größe übersteigt.
Wie löst ApiCatcher dieses Problem?
Der entscheidende Punkt: Statische Dateien benötigen in der Regel keine Body-Umschreibung oder Skriptänderung. Es besteht also kein Grund, deren Inhalte im Arbeitsspeicher zu puffern. Stattdessen schreibt ApiCatcher sie direkt auf die Festplatte — die aus dem Empfangspuffer gelesenen Bytes werden sofort in eine Datei geschrieben, ohne Zwischenspeicherung im RAM.
Ein wichtiges Detail: Große HTTP-Nutzdaten werden auf TCP-Ebene fragmentiert. Eine 1-MB-Dateiübertragung wird in TCP-Segmente von etwa 64 KB aufgeteilt. Durch das Schreiben jedes Segments bei Ankunft werden zu jedem Zeitpunkt nur 64 KB Speicher verbraucht — nicht die gesamte Datei. Nach Abschluss der Anfrage oder Antwort wird der Dateipfad anstelle des Rohinhalts in der Datenbank gespeichert.
Der Kompromiss besteht darin, dass beim Löschen von Anfragedatensätzen die zugehörigen Body-Dateien gefunden und gelöscht werden müssen, was eine eigene Konsistenzverwaltung erfordert. Deshalb ist das Löschen in ApiCatcher etwas langsamer — die Datensätze werden einzeln durchlaufen. Wir halten diesen Kompromiss jedoch für gerechtfertigt, da das Löschen keine häufige Operation ist und selbst 10.000 Datensätze in etwa 5 Sekunden bereinigt werden können.
Über die reine Erfassung hinaus rendert ApiCatcher Bilder, Videos und Audio direkt in der App mit Ein-Klick-Wiedergabe. Wir haben zudem eigene Seiten für Vorschau und Stapel-Export erstellt, um das Extrahieren von Testmaterialien zu erleichtern.
Wir verwenden denselben Streaming-Ansatz auf iOS, Windows und macOS — auch wenn Desktop-Plattformen keine solchen Speicherbeschränkungen haben, liefert dieses Design plattformübergreifend bessere Leistung.
ApiCatcher for iOS Screenshot:

ApiCatcher for macOS Screenshot:
