Java ProxySelector: නොමැති HTTP සහ HTTPS වරාය සාමාන්යකරණය
අභිරුචි ProxySelector එකක ගමනාන්ත සංසන්දනය කිරීමට පෙර ඉවත් කළ HTTP වරාය සාමාන්යකරණය කරන්න, සහ HTTP නීති අමු socket තේරීමෙන් බැහැර කරන්න.
එක් නීතියක් http://reports.example:80/ proxy හරහා යවයි නමුත් http://reports.example/ සෘජුව යාමට ඉඩ දෙයි. එම URL දෙකම එකම සාමාන්ය HTTP අන්ත ලක්ෂ්යය විස්තර කරයි. නොගැලපීම සාමාන්යයෙන් පැනනගින්නේ ඒවායේ විග්රහ කළ වරාය අකුරින් අකුර සංසන්දනය කිරීමෙනි.
URI තුළ වරායක් නොමැති විට URI.getPort() -1 ලෙස ආපසු දෙයි. එය ක්රමයේ පෙරනිමිය ප්රතිස්ථාපනය නොකරයි. අගය 80 සමඟ සංසන්දනය කරන මාර්ග නීතියක් දෙවන URL මඟහරිනු ඇත.
String scheme = uri.getScheme();
int port = uri.getPort();
if (port == -1) {
if ("http".equalsIgnoreCase(scheme)) port = 80;
else if ("https".equalsIgnoreCase(scheme)) port = 443;
}
සංසන්දනයේ දෙපැත්තටම එකම සාමාන්යකරණය යොදන්න. ඉල්ලීමේ URI පමණක් නිවැරදි කිරීමෙන් ඉවත් කළ වරායක් සහිත වින්යාසගත ගමනාන්තය තවමත් නොගැලපී පවතී. සත්කාරකය, ඵලදායී වරාය සහ අදහස් කළ ක්රමය සංසන්දනය කරන්න; විකෘත හෝ සත්කාරක රහිත ගමනාන්ත නිර්වචනය කළ දෝෂ මාර්ගයක් හරහා ප්රතික්ෂේප කරන්න.
සෑම callback එකක්ම HTTP තීරණයක් නොකරන්න
පෙරනිමි තේරීමකරුගෙන් අමු socket සම්බන්ධතා සඳහාද socket ක්රමය සමඟ විමසිය හැක. සත්කාරකය සහ වරාය පමණක් ගැලපීම නිසා එම callback එක URL ඉල්ලීම් සඳහා අදහස් කළ HTTP proxy එකක් ආපසු දිය යුතු නොවේ. අනුග්රහය නොලබන ක්රම පෙර තේරීමකරුට පවරන්න, එහි සුදුසු හැසිරීම රැක ගනිමින්.
ඔබේම තේරීමකරු ස්ථාපනය කිරීමට පෙර එම පෙර තේරීමකරු අල්ලා ගන්න. ප්රතිස්ථාපකය තුළින් වත්මන් පෙරනිමිය සෙවීම නැවත ප්රතිස්ථාපකයම ඇමතිය හැක.
නොගැලපීම විනිශ්චය කරන විට ක්රමය, සත්කාරකය, මුල් වරාය සහ ඵලදායී වරාය සටහන් කරන්න. JDK ක්රියාත්මක කිරීම් අතර නිරීක්ෂිත එක් සංඛ්යාවක් හෝ callback අනුපිළිවෙලක් මත රඳා නොසිටින්න. ප්රතිපත්තිය ලබා දුන් සෑම URI එකකටම නිවැරදි තීරණයක් ගත යුතුය.