JDK 25 HttpClient не користи SOCKS маршрути од ProxySelector
Изберете Java HTTP транспорт што навистина го поддржува SOCKS, наместо да се потпирате само на типот што го враќа ProxySelector.
Java прокси објектот опишува маршрута. Мрежниот клиент сепак одлучува кои видови маршрути може да ги користи. Ова е важно кога достапната крајна точка зборува SOCKS, а апликацијата користи java.net.http.HttpClient.
Во овде разгледаната имплементација на JDK 25, кодот за барање на HTTP клиентот прифаќа HTTP кандидат од селекторот. SOCKS кандидатот не го тера да изврши SOCKS преговарање; имплементацијата може да продолжи без прокси. Затоа успешен одговор не е доволен доказ дека бил користен SOCKS записот на прилагоден селектор.
Прво изберете транспорт
За постоечка апликација заснована на URLConnection, на ракувачот со протоколот може да му се даде поддржан експлицитен прокси при отворање на врската:
Proxy route = new Proxy(Proxy.Type.SOCKS,
new InetSocketAddress("proxy.example", 1080));
URLConnection connection = URI.create("https://service.example/")
.toURL().openConnection(route);
connection.setConnectTimeout(5000);
connection.setReadTimeout(15000);
За дозволени тестови на јавни цели, користете соодветна SOCKS крајна точка од вашата услуга или од списокот на SOCKS прокси. Ова е различен клиентски API, а не алтернативно пишување на HttpClient.Builder.proxy. Зачувајте ја URL-адресата на целта за HTTPS да продолжи да ја препознава предвидената веб-страница.
Апликација што мора да го задржи java.net.http може наместо тоа да користи компатибилна HTTP прокси крајна точка, вклучувајќи одобрен адаптер што ја обработува понатамошната SOCKS врска. Тоа додава вистинска компонента и уште една граница на пристап; менувањето на портата 8080 во 1080 не го дава тој превод.
Држете го изборот и усвојувањето видливи
Забележете го и резултатот на селекторот и врската што клиентот навистина ја отвора. Првото го опишува излезот на политиката; второто утврдува дали имплементацијата го усвоила.
Врзете ги заклучоците со користеното извршно опкружување и транспорт. JVM SOCKS својствата што ги користи една имплементација на сокет не се ветување дека секоја HTTP библиотека ги консултира. Кога маршрутата е задолжителна, неподдржан тип на прокси треба да се открие пред да се прифати навидум успешно директно барање.