JDK 25 HttpClient არ იყენებს ProxySelector-ის SOCKS მარშრუტებს
აირჩიეთ 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 ბიბლიოთეკა მათ მიმართავს. როცა მარშრუტი სავალდებულოა, მხარდაუჭერელი პროქსის ტიპი უნდა გამოვლინდეს თითქოსდა წარმატებული პირდაპირი მოთხოვნის მიღებამდე.