Установить proxy только для одного потока (запроса)

Рейтинг: 2Ответов: 2Опубликовано: 10.03.2015

Здравствуйте. Есть веб-приложение, которое ищет по разным сайтам разные штуки. Каждый сайт представлен своим классом.
Появилась необходимость для одного сайта сделать обращение через proxy.
Делаю так

System.setProperty("https.proxyHost", "192.168.5.1");  
System.setProperty("https.proxyPort", "1080");

Но в таком случае прокси устанавливается для всех соединений. Если сразу же после установки прокси делать откат к стандартным настройкам, то несколько запросов все равно успевают выполниться с прокси. Как можно установить прокси для отдельного потока (=запроса)?

P.S. Вытягиваю все JSOUP-ом, поэтому использовать класс Proxy не могу.

Ответы

▲ 1Принят

Все-таки не смог сделать установку соединения с сайтом через прокси с помощью jsoup. Пришлось делать так:

    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("xxx.xxx.xxx.xxx", xxxx));
    URL url = new URL("http://www.example.com");
    HttpURLConnection uc = (HttpURLConnection) url.openConnection(proxy);
    uc.setConnectTimeout(20000);
    uc.setRequestMethod("GET");
    uc.setDoInput(true);
    uc.setDoOutput(true);
    uc.setRequestProperty("Referrer", "http://www.exapmle.com");

    String line = null;
    StringBuffer tmp = new StringBuffer();
    BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
    while ((line = in.readLine()) != null) {
        tmp.append(line);
    }

    Document doc = Jsoup.parse(String.valueOf(tmp));

P.S. Если приложение не многопоточное, то вполне можно обойтись установкой системных параметров прокси.

▲ 1

А почему нельзя задавать url в виде: http://12.241.123.211:8000/http://www.google.com , например?