Pripojenie prostredníctvom proxy serverov v jadre Java

1. Úvod

Proxy servery fungujú ako sprostredkovatelia medzi klientskymi aplikáciami a inými servermi. V podnikovom prostredí ich často používame na zabezpečenie kontroly nad obsahom, ktorý používatelia konzumujú, zvyčajne za hranicami siete.

V tomto návode sa pozrieme na ako sa pripojiť cez proxy servery v Jave -.

Najskôr preskúmame starší, globálnejší prístup, ktorý je široký pre JVM a je nakonfigurovaný s vlastnosťami systému. Potom si predstavíme Proxy triedy, ktorá nám dáva väčšiu kontrolu tým, že umožňuje konfiguráciu na základe jednotlivých pripojení.

2. Inštalácia

Na spustenie ukážok v tomto článku budeme potrebovať prístup k serveru proxy. Squid je populárna implementácia, ktorá je k dispozícii pre väčšinu operačných systémov. Predvolená konfigurácia Squidu bude pre väčšinu našich príkladov dosť dobrá.

3. Používanie globálneho nastavenia

Java vystavuje množinu systémových vlastností, ktoré možno použiť na konfiguráciu správania v celom prostredí JVM. Tento „prístup pre všetkých“ je často najjednoduchšie implementovať, ak je vhodný pre prípad použitia.

Môžeme nastavte požadované vlastnosti z príkazového riadku pri vyvolaní JVM. Ako alternatívu môžeme tiež nastavte ich volaním System.setProperty () za behu.

3.1. Dostupné vlastnosti systému

Java poskytuje obslužné rutiny proxy pre protokoly HTTP, HTTPS, FTP a SOCKS. Proxy server je možné definovať pre každú obslužnú rutinu ako názov hostiteľa a číslo portu:

  • http.proxyHost - Názov hostiteľa servera proxy HTTP
  • http.proxyPort - Číslo portu HTTP proxy servera - vlastnosť je voliteľná a predvolené je 80, ak nie je uvedené
  • http.nonProxyHosts - Zoznam hostiteľských vzorov s oddeľovačom rúrok („|“), pre ktoré by sa mal server proxy obísť - platí pre obslužné programy HTTP aj HTTPS, ak sú nastavené
  • socksProxyHost- Názov hostiteľa servera SOCKS proxy
  • socksProxyPort- Číslo portu proxy servera SOCKS

Ak upresňuje nonProxyHosts, hostiteľské vzory môžu začínať alebo končiť zástupným znakom („*“). Možno bude potrebné uniknúť z „|“ oddeľovač na platformách Windows. Vyčerpávajúci zoznam všetkých dostupných vlastností systému súvisiacich s proxy serverom sa nachádza v oficiálnej dokumentácii Oracle k sieťovým vlastnostiam Java.

3.2. Nastaviť pomocou argumentov príkazového riadku

Môžeme definovať proxy na príkazovom riadku odovzdaním nastavení ako vlastností systému:

java -Dhttp.proxyHost = 127.0.0.1 -Dhttp.proxyPort = 3128 com.baeldung.networking.proxies.CommandLineProxyDemo

Pri spustení procesu týmto spôsobom sme schopní jednoducho použiť openConnection () na URL bez ďalších prác:

URL URL = nová URL (RESOURCE_URL); URLConnection con = url.openConnection ();

3.3. Nastaviť pomocou System.setProperty (reťazec, reťazec)

Ak nedokážeme nastaviť vlastnosti proxy na príkazovom riadku, môžeme ich nastaviť pomocou volaní na System.setProperty () v rámci nášho programu:

System.setProperty ("http.proxyHost", "127.0.0.1"); System.setProperty ("http.proxyPort", "3128"); URL URL = nová URL (RESOURCE_URL); URLConnection con = url.openConnection (); // ...

Ak neskôr príslušné vlastnosti systému nastavíme ručne, proxy sa už nebude používať:

System.setProperty ("http.proxyHost", null);

3.4. Obmedzenia globálnej konfigurácie

Aj keď je ľahké implementovať použitie globálnej konfigurácie s vlastnosťami systému, tento prístup obmedzuje to, čo môžeme robiť, pretože nastavenia platia pre celý JVM. Z tohto dôvodu sú nastavenia definované pre konkrétny protokol aktívne po celú dobu životnosti JVM alebo dovtedy, kým nebudú zrušené.

Aby ste obišli toto obmedzenie, môže byť lákavé podľa potreby zapnúť a vypnúť nastavenia. Aby to bolo možné bezpečne vykonať vo viacvláknovom programe, bolo by potrebné zaviesť opatrenia na ochranu pred problémami so súbežnosťou.

Ako alternatívu Proxy API poskytuje podrobnejšiu kontrolu nad konfiguráciou proxy.

4. Pomocou Proxy API

The Proxy trieda nám poskytuje flexibilný spôsob konfigurácie serverov proxy na základe jednotlivých pripojení. Ak existujú nejaké nastavenia servera proxy JVM, nastavenia servera proxy založené na pripojení pomocou Proxy triedy ich prepíše.

Existujú tri typy serverov proxy, ktoré môžeme definovať Proxy.Type:

  • HTTP - proxy pomocou protokolu HTTP
  • PONOŽKY - proxy používajúci protokol SOCKS
  • PRIAMY - výslovne nakonfigurované priame pripojenie bez proxy

4.1. Používanie HTTP Proxy

Ak chcete používať server proxy HTTP, najskôr sme zabaliť a SocketAddress napríklad s a Proxy a typ Proxy.Type.HTTP. Ďalej jednoducho odovzdáme znak Proxy inštancia do URLConnection.openConnection ():

URL weburl = nová URL (URL_STRING); Proxy webProxy = nový Proxy (Proxy.Type.HTTP, nový InetSocketAddress ("127.0.0.1", 3128)); HttpURLConnection webProxyConnection = (HttpURLConnection) weburl.openConnection (webProxy);

Jednoducho povedané, znamená to, že sa pripojíme k URL_STRING, ale potom smerujte toto pripojenie cez proxy server hostený na 127.0.0.1:3128.

4.2. Používanie DIRECT Proxy

Možno budeme mať požiadavku na priame pripojenie k hostiteľovi. V tomto prípade môžeme výslovne obísť proxy server, ktorý je možné globálne nakonfigurovať pomocou statického súboru Proxy.NO_PROXY inštancia. Pod kryty vytvára API novú inštanciu Proxy pre nás pomocou Proxy.Type.DIRECT ako typ:

HttpURLConnection directConnection = (HttpURLConnection) weburl.openConnection (Proxy.NO_PROXY);

V zásade platí, že ak neexistuje globálne nakonfigurovaný server proxy, potom je to to isté ako volanie openConnection () bez argumentov.

4.3. Používanie proxy SOCKS

Používanie proxy servera SOCKS je pri práci podobné variantu HTTP URLConnection. Začíname tým baliaci a SocketAddress napríklad s a Proxy pomocou typu Proxy.Type.SOCKS. Potom minieme Proxy inštancia do URLConnection.openConnection:

Proxy socksProxy = new Proxy (Proxy.Type.SOCKS, new InetSocketAddress ("127.0.0.1", 1080)); HttpURLConnection socksConnection = (HttpURLConnection) weburl.openConnection (socksProxy); 

Je to tiež možné pri pripojení k soketu TCP použite proxy SOCKS. Najskôr použijeme Proxy inštancia na zostrojenie a Zásuvka. Potom sme prejsť cieľ SocketAddress inštancia do Socket.connect ():

Socket proxySocket = nový Socket (socksProxy); InetSocketAddress socketHost = nová InetSocketAddress (SOCKET_SERVER_HOST, SOCKET_SERVER_PORT); proxySocket.connect (socketHost);

5. Záver

V tomto článku sme sa pozreli na to, ako pracovať s proxy servermi v základnej Jave.

Najprv sme sa pozreli na starší globálnejší štýl pripájania cez proxy servery pomocou vlastností systému. Potom sme videli, ako používať Proxy trieda, ktorá poskytuje presnú kontrolu pri pripájaní cez proxy servery.

Všetky zdrojové kódy použité v tomto článku nájdete ako vždy na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found