Java ProxySelector: normalizimi i porteve HTTP dhe HTTPS që mungojnë
Normalizoni portet HTTP të lëna jashtë përpara se të krahasoni destinacionet në një ProxySelector të personalizuar dhe mbani rregullat HTTP jashtë përzgjedhjes së socketëve të papërpunuar.
Një rregull e dërgon http://reports.example:80/ përmes një proxy por lejon http://reports.example/ të kalojë drejtpërdrejt. Këto URL përshkruajnë të njëjtin pikëfundore të zakonshme HTTP. Mospërputhja zakonisht vjen nga krahasimi fjalë për fjalë i porteve të analizuara.
URI.getPort() kthen -1 kur në URI nuk shfaqet asnjë port. Ai nuk e zëvendëson vlerën e parazgjedhur të skemës. Një politikë rrugëtimi që krahason vlerën me 80 do të humbasë URL-në e dytë.
String scheme = uri.getScheme();
int port = uri.getPort();
if (port == -1) {
if ("http".equalsIgnoreCase(scheme)) port = 80;
else if ("https".equalsIgnoreCase(scheme)) port = 443;
}
Aplikoni të njëjtin normalizim në të dyja anët e krahasimit. Rregullimi vetëm i URI-së së kërkesës lë ende një destinacion të konfiguruar me port të lënë jashtë pa përputhje. Krahasoni hostin, portin efektiv dhe skemën e synuar; refuzoni destinacionet e keqformuara ose pa host përmes një rruge gabimi të përcaktuar.
Mos e ktheni çdo callback në vendim HTTP
Një përzgjedhës i parazgjedhur mund të konsultohet edhe për lidhje socketësh të papërpunuar, me skemën socket. Vetëm përputhja e hostit dhe portit nuk duhet ta bëjë atë callback të kthejë një proxy HTTP të destinuar për kërkesa URL. Delego skemat e pambështetura te përzgjedhësi i mëparshëm, duke ruajtur sjelljen e tij të përshtatshme.
Kapeni atë përzgjedhës të mëparshëm përpara se të instaloni tuajin. Kërkimi i parazgjedhur aktual nga brenda zëvendësuesit thjesht mund të thërrasë përsëri zëvendësuesin.
Regjistroni skemën, hostin, portin origjinal dhe portin efektiv kur diagnostikoni një mospërputhje. Mos u mbështetni në një numër të vetëm të vëzhguar ose në rendin e callback-eve mes implementimeve të JDK-së. Politika duhet të marrë një vendim të saktë për çdo URI të dhënë.