OkHttp-Ressourcen wiederverwenden, während ein anderer Proxy gewählt wird
Wählen Sie einen proxy-konfigurierten OkHttp-Client, bevor Sie einen Aufruf erstellen, und verstehen Sie, was newBuilder teilt.
Eine OkHttp-Anfrage hat kein allgemeines veränderbares Proxy-Feld. Wählen Sie den Client mit der beabsichtigten Route, bevor Sie seinen Aufruf erstellen.
Wenn der Rest der Konfiguration geteilt bleiben soll, leiten Sie den gerouteten Client von einem vorhandenen Client ab:
OkHttpClient routed = baseClient.newBuilder()
.proxy(new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("203.0.113.10", 8080)))
.build();Der Endpunkt ist nur illustrativ. Öffentliche HTTP-Endpunkte aus der HTTP-Proxy-Liste können diese Socket-Adresse für eine erlaubte Route eines öffentlichen Dienstes füllen, sofern die Richtlinie des Basis-Clients dem neuen Endpunkt keine Proxy-Anmeldedaten liefert. OkHttp dokumentiert, dass newBuilder Verbindungspool- und Thread-Ressourcen mit dem ursprünglichen Client teilt. Das bedeutet nicht, dass ein über einen Proxy aufgebauter Socket als andere Route umbenannt werden kann. Die Verbindungseignung hängt weiterhin von der Routen- und Adresskonfiguration ab.
Behalten Sie für wiederholte Arbeit einen begrenzten Satz von Clients bei, verschlüsselt nach der Routing-Richtlinie, die Sie tatsächlich benötigen. Vermeiden Sie eine unbegrenzte Map, deren Schlüssel jedes jemals beobachtete temporäre Konto oder jede Proxy-Variante enthalten.
Ressourcenteilen wirkt sich auch auf das Herunterfahren aus. Das Schließen eines geteilten Caches oder das Herunterfahren eines geteilten Dispatchers kann andere abgeleitete Clients beeinträchtigen, die diese Ressourcen nutzen. Geben Sie der Ressourceneigentümerschaft eine klare Lebensdauer auf Anwendungsebene, statt jeden abgeleiteten Client als isolierten Netzwerk-Stack zu behandeln.
Schließlich sollten Sie die Identität des gewählten Proxys in die eigenen Metadaten des Aufrufs aufnehmen. Eine globale Variable „zuletzt gewählter Proxy“ kann die Route mehrerer gleichzeitiger Anfragen nicht identifizieren.