Java ProxySelector: staðla vantar HTTP- og HTTPS-porta
Staðlaðu sleppta HTTP-porta áður en þú berð saman áfangastaði í sérsniðnum ProxySelector og haltu HTTP-reglum utan við val á hrásokkjum.
Regla sendir http://reports.example:80/ í gegnum proxy en lætur http://reports.example/ fara beint. Þessar URL slóðir lýsa sama venjulega HTTP-endapunkti. Misræmið kemur venjulega af því að bera saman þáttuðu portana bókstaflega.
URI.getPort() skilar -1 þegar ekkert port kemur fram í URI. Hann kemur ekki í stað sjálfgefins gildis fyrir skemað. Leiðarstefna sem ber gildið saman við 80 mun missa seinni URL slóðina.
String scheme = uri.getScheme();
int port = uri.getPort();
if (port == -1) {
if ("http".equalsIgnoreCase(scheme)) port = 80;
else if ("https".equalsIgnoreCase(scheme)) port = 443;
}
Beittu sömu stöðlun á báðar hliðar samanburðarins. Að laga aðeins URI beiðninnar skilur eftir stilltan áfangastað með slepptu porti án samsvörunar. Berðu saman hýsilinn, raunverulegt port og fyrirhugað skema; hafnaðu illa mótuðum eða hýsilausum áfangastöðum í gegnum skilgreinda villuleið.
Ekki gera hvert bakkall að HTTP-ákvörðun
Einnig má spyrja sjálfgefinn veljara fyrir tengingar hrásokkja, með skemanu socket. Samsvörun hýsils og ports ein og sér má ekki valda því að það bakkall skili HTTP-proxy sem er ætlað fyrir URL beiðnir. Fela óstudd skemu fyrri veljaranum og varðveittu viðeigandi hegðun hans.
Gríptu fyrri veljarann áður en þú setur upp þinn eigin. Að fletta upp núverandi sjálfgefnu innan frá staðgenglinum getur einfaldlega kallað á staðgengilinn aftur.
Skráðu skemað, hýsilinn, upprunalegt port og raunverulegt port þegar þú greinir misræmi. Treystu ekki á eina athugaða tölu eða röð bakkalla milli JDK-útfærslna. Stefnan á að taka rétta ákvörðun fyrir hvert veitt URI.