Flutter SDK - Intercettare la rete
Intercettare la rete
Section titled Intercettare la reteChiama patchNetwork() una sola volta, dopo aver avviato il tracker:
import 'package:openreplay/openreplay.dart';
OpenReplay.instance.patchNetwork();
Questo installa un HttpOverrides, concatenandolo a quanto era stato installato in precedenza, e acquisisce ogni chiamata HttpClient di dart:io — il che copre IOClient di package:http e l’adapter predefinito di Dio. È idempotente; unpatchNetwork() ripristina gli override precedenti.
Il traffico di ingestione del tracker stesso non viene mai acquisito: il suo HttpClient viene costruito direttamente, aggirando gli override.
Opzioni di rete
Section titled Opzioni di reteORNetworkOptions rispecchia le opzioni di rete del tracker web:
capturePayload: boolRegistra i body di richieste e risposte. Valore predefinito:false— i body vengono scartati a meno che tu non lo attivi esplicitamente.ignoreHeaders: List<String>Nomi degli header da scartare, confrontati senza distinguere maiuscole e minuscole. Valore predefinito:['cookie', 'set-cookie', 'authorization'].ignoreAllHeaders: boolScarta tutti gli header. (Il tracker web lo esprime comeignoreHeaders: true; Dart non ha un tipo unione di questo genere, quindi è un flag separato.) Valore predefinito:false.failuresOnly: boolRegistra solo le risposte al di fuori dell’intervallo 2xx. Valore predefinito:false.sessionTokenHeader: String?Se impostato, alle richieste in uscita viene aggiunto un header con questo nome che contiene il token di sessione, in modo da poter correlare i log del tuo backend con il replay. Valore predefinito:null.sanitizer: ORRequestResponse? Function(ORRequestResponse)?Ha l’ultima parola su ciò che viene registrato. Valore predefinito:null.
OpenReplay.instance.patchNetwork(const ORNetworkOptions(
capturePayload: true,
failuresOnly: true,
sessionTokenHeader: 'X-OpenReplay-Session',
));
Sanificare la richiesta
Section titled Sanificare la richiestaIl sanitizer riceve un ORRequestResponse per ogni chiamata acquisita e lo restituisce — modificato a tuo piacimento — oppure restituisce null per scartare completamente la chiamata.
OpenReplay.instance.patchNetwork(ORNetworkOptions(
capturePayload: true,
sanitizer: (record) {
if (record.url.contains('/internal/')) return null; // drop it
record.url = record.url.replaceAll(RegExp(r'token=[^&]+'), 'token=***');
record.requestHeaders.remove('x-api-key');
final body = record.requestBody;
if (body is Map) body.remove('password');
return record;
},
));
ORRequestResponse contiene url, method, status, duration, requestHeaders, responseHeaders, requestBody e responseBody. I body vengono decodificati quando sono analizzabili come JSON, quindi il sanitizer riceve un oggetto anziché una stringa — in linea con il comportamento del tracker web.
Registrare le chiamate manualmente
Section titled Registrare le chiamate manualmenteUn adapter Dio personalizzato (o qualsiasi client che aggira HttpOverrides) richiede un proprio interceptor:
OpenReplay.instance.networkRequest(
url: 'https://api.example.com/cart',
method: 'POST',
requestJson: '{"sku":"A1"}',
responseJson: '{"ok":true}',
status: 200,
duration: 132, // ms
);
Le operazioni GraphQL hanno un proprio messaggio, da usare con i plugin gql di OpenReplay:
OpenReplay.instance.graphQL(
operationKind: 'query',
operationName: 'GetCart',
variables: '{"id":"42"}',
response: '{"data":{...}}',
duration: 87,
);
Hai domande?
Section titled Hai domande?Se hai domande su questo processo, non esitare a contattarci su Slack .