Java ProxySelector: ਗੁੰਮ HTTP ਅਤੇ HTTPS ਪੋਰਟਾਂ ਨੂੰ ਸਧਾਰਨ ਬਣਾਉਣਾ
ਕਸਟਮ ProxySelector ਵਿੱਚ ਮੰਜ਼ਿਲਾਂ ਦੀ ਤੁਲਨਾ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਛੱਡੀਆਂ ਗਈਆਂ HTTP ਪੋਰਟਾਂ ਨੂੰ ਸਧਾਰਨ ਬਣਾਓ, ਅਤੇ HTTP ਨਿਯਮਾਂ ਨੂੰ ਕੱਚੇ socket ਚੋਣ ਤੋਂ ਬਾਹਰ ਰੱਖੋ।
ਇੱਕ ਨਿਯਮ http://reports.example:80/ ਨੂੰ ਪ੍ਰੌਕਸੀ ਰਾਹੀਂ ਭੇਜਦਾ ਹੈ ਪਰ 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 ਪ੍ਰੌਕਸੀ ਵਾਪਸ ਨਹੀਂ ਕਰਨੀ ਚਾਹੀਦੀ। ਅਸਮਰਥਿਤ ਸਕੀਮਾਂ ਨੂੰ ਪਿਛਲੇ ਚੋਣਕਰਤਾ ਨੂੰ ਸੌਂਪੋ ਅਤੇ ਉਸਦਾ ਢੁਕਵਾਂ ਵਿਵਹਾਰ ਬਣਾਈ ਰੱਖੋ।
ਆਪਣਾ ਕਸਟਮ ਚੋਣਕਰਤਾ ਸਥਾਪਿਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਸ ਪਿਛਲੇ ਚੋਣਕਰਤਾ ਨੂੰ ਫੜੋ। ਬਦਲ ਦੇ ਅੰਦਰੋਂ ਮੌਜੂਦਾ ਡਿਫਾਲਟ ਲੱਭਣਾ ਬਦਲ ਨੂੰ ਦੁਬਾਰਾ ਕਾਲ ਕਰ ਸਕਦਾ ਹੈ।
ਅਸੰਗਤੀ ਦਾ ਨਿਦਾਨ ਕਰਦਿਆਂ ਸਕੀਮ, ਹੋਸਟ, ਮੂਲ ਪੋਰਟ ਅਤੇ ਪ੍ਰਭਾਵੀ ਪੋਰਟ ਲੌਗ ਕਰੋ। JDK ਲਾਗੂਕਰਨਾਂ ਵਿੱਚ ਇੱਕ ਦੇਖੀ ਗਈ ਸੰਖਿਆ ਜਾਂ callback ਕ੍ਰਮ 'ਤੇ ਨਿਰਭਰ ਨਾ ਕਰੋ। ਨੀਤੀ ਨੂੰ ਹਰ ਦਿੱਤੇ URI ਲਈ ਸਹੀ ਫੈਸਲਾ ਲੈਣਾ ਚਾਹੀਦਾ ਹੈ।