Как использовать HTTP-прокси в Java - PullRequest
22 голосов
/ 05 января 2011

Я пишу код, который подключается к веб-сайтам и проверяет некоторый код, например, сканер.Но мне нужно подключиться через прокси-сервер и изменить IP-адрес (чтобы он не отображал IP-адрес клиента в журналах сервера).

Как это можно сделать с помощью Java?

Ответы [ 3 ]

47 голосов
/ 05 января 2011

Вы можете использовать системные свойства java для настройки прокси-сервера или передать его в качестве параметров командной строки.

Вы можете найти некоторые детали и образцы здесь .

Пример: перед открытием соединения

System.setProperty("http.proxyHost", "myProxyServer.com");
System.setProperty("http.proxyPort", "80");

Или вы можете использовать сетевые прокси по умолчанию, настроенные в системе

System.setProperty("java.net.useSystemProxies", "true");

Начиная с Java 1.5, вы можете создать экземпляр прокси и передать его методу openConnection().

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();

Или, как предлагает lisak , вы можете использовать некоторые сторонние библиотеки, которые лучше удовлетворяют ваши потребности.

10 голосов
/ 05 января 2011

Или вы также можете использовать HttpClient , который лучше соответствует вашим потребностям. Ознакомьтесь с документацией, она краткая и очень информативная.

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpHost proxy = new HttpHost("someproxy", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
0 голосов
/ 12 декабря 2018
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();

Это сработало для меня. Я был в состоянии использовать прокси для конкретного соединения или передачи. Ранее мы использовали System.setProperty, который устанавливал его на системном уровне, и все внутренние и внешние запросы начали использовать один и тот же прокси.

Также Proxy.Type.HTTP работает как для http, так и для https

...