Spring WebClient Jetty-სთან: ჩვეულებრივი HTTP პროქსი CONNECT-ის გარეშე
გამოიყენეთ Spring-ის Jetty კონექტორი შესაბამისი HTTP/1.1 კლიენტისა და პროქსის პროტოკოლებით, როცა საჭიროა ჩვეულებრივი გადაგზავნილი HTTP მოთხოვნა.
Reactor Netty-ის HTTP პროქსის დამმუშავებელი CONNECT გვირაბს ქმნის ჩვეულებრივი HTTP დანიშნულებისთვისაც. თუ განსაზღვრული პროქსი სამაგიეროდ ჩვეულებრივ HTTP/1.1 გადაგზავნას იღებს, Spring WebClient-ს შეუძლია სხვა მხარდაჭერილი კონექტორის გამოყენება.
Spring 6.2-ისთვის Jetty 12.0.35-ის კლიენტის API-ით და თავსებადი Jetty Reactive Streams ინტეგრაციით:
var jetty = new org.eclipse.jetty.client.HttpClient(
new org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP());
jetty.getProxyConfiguration().addProxy(
new org.eclipse.jetty.client.HttpProxy("proxy.example", 8080));
var client = WebClient.builder()
.clientConnector(new JettyClientHttpConnector(jetty))
.build();
WebClient და JettyClientHttpConnector Spring-ის კლასებია. მართეთ მოწოდებული Jetty კლიენტის გაშვება და გაჩერება აპლიკაციის ჩვეულებრივი სასიცოცხლო ციკლით.
Jetty-ის HTTP/1.1 პროქსის შეუძლია ჩვეულებრივი HTTP/1.1 მოთხოვნის გადაგზავნა გვირაბის გარეშე, როცა დანიშნულებისა და კლიენტ-პროქსის პროტოკოლები ემთხვევა. მისი requiresTunnel პოლიტიკა CONNECT-ს იყენებს დაცული დანიშნულებებისა და შეუთავსებელი პროტოკოლური ბილიკებისთვის.
ეს არ არის ჩვეულებრივი HTTPS გვირაბიდან CONNECT-ის მოცილების გზა. შეინარჩუნეთ დანიშნულების სქემა სწორად.
გამოიყენეთ addProxy მითითებულ Jetty API-ში. getProxies უცვლელ სიას აბრუნებს, ამიტომ ძველი getProxies().add(...) რეცეპტი მისი ამჟამინდელი ცვლილების ინტერფეისი არ არის.
დაშვებულ საჯარო პროქსის მარშრუტზე საჯარო HTTP დანიშნულებებისთვის HTTP პროქსების სია გთავაზობთ კანდიდატებს Jetty-ის პროქსის ჰოსტისა და პორტისთვის. კონექტორების შედარებისას წაიკითხეთ პროქსის რეალური პასუხი. ავთენტიფიკაცია, დანიშნულების პოლიტიკა და მიუწვდომელი დანიშნულება ცალკე რჩება გადაგზავნილი HTTP-სა და CONNECT-ს შორის არჩევისგან.