Ένα αίτημα OkHttp δεν έχει γενικό μεταβλητό πεδίο proxy. Επιλέξτε τον client με τη σκοπούμενη διαδρομή πριν δημιουργήσετε την κλήση του.

Όταν η υπόλοιπη διαμόρφωση πρέπει να παραμείνει κοινή, παράγετε τον δρομολογημένο client από έναν υπάρχοντα client:

OkHttpClient routed = baseClient.newBuilder()
    .proxy(new Proxy(Proxy.Type.HTTP,
        new InetSocketAddress("203.0.113.10", 8080)))
    .build();

Το τελικό σημείο είναι ενδεικτικό. Δημόσια τελικά σημεία HTTP από τη λίστα proxy HTTP μπορούν να συμπληρώσουν αυτή τη διεύθυνση socket για μια επιτρεπόμενη διαδρομή δημόσιας υπηρεσίας, υπό την προϋπόθεση ότι η πολιτική του βασικού client δεν παρέχει διαπιστευτήρια proxy στο νέο τελικό σημείο. Το OkHttp τεκμηριώνει ότι το newBuilder μοιράζεται πόρους δεξαμενής συνδέσεων και νημάτων με τον αρχικό client. Αυτό δεν σημαίνει ότι ένα socket που έχει δημιουργηθεί μέσω ενός proxy μπορεί να μετονομαστεί ως άλλη διαδρομή. Η καταλληλότητα σύνδεσης εξακολουθεί να εξαρτάται από τη διαμόρφωση διαδρομής και διεύθυνσης.

Για επαναλαμβανόμενη εργασία, διατηρήστε ένα περιορισμένο σύνολο clients με κλειδιά βάσει της πολιτικής δρομολόγησης που πραγματικά χρειάζεστε. Αποφύγετε έναν απεριόριστο χάρτη του οποίου τα κλειδιά περιέχουν κάθε προσωρινό λογαριασμό ή παραλλαγή proxy που έχει παρατηρηθεί ποτέ.

Ο διαμοιρασμός πόρων επηρεάζει επίσης τον τερματισμό. Το κλείσιμο μιας κοινής προσωρινής μνήμης ή ο τερματισμός ενός κοινού dispatcher μπορεί να επηρεάσει άλλους παράγωγους clients που χρησιμοποιούν αυτούς τους πόρους. Δώστε στην ιδιοκτησία πόρων σαφή διάρκεια ζωής σε επίπεδο εφαρμογής αντί να αντιμετωπίζετε κάθε παράγωγο client ως απομονωμένη στοίβα δικτύου.

Τέλος, συμπεριλάβετε την ταυτότητα του επιλεγμένου proxy στα ίδια τα μεταδεδομένα της κλήσης. Μια καθολική μεταβλητή «τελευταίο επιλεγμένο proxy» δεν μπορεί να προσδιορίσει τη διαδρομή πολλών ταυτόχρονων αιτημάτων.

Σχετικά άρθρα