Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Java > Определение прокси


Автор: Kamenev_D 30.11.15, 15:20
Добрый день уважаемые! Подскажите как можно реализовать определение прокси-сервера? Т.е идет обращение к ресурсу и если ПК использует выход через прокси, то показать окно для заполнения. Как вариант можно использовать коды ошибок и если возвращается ошибка 407 то значить используется прокси. Но думаю это коряво и неправильно. Есть какие то методы стандартные в Яве?

Добавлено
Что-то ничего не пойму я.
Пробую
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
      int c;
            URL hp = new URL("http://forum.sources.ru");
            HttpURLConnection hpCon = (HttpURLConnection)hp.openConnection();
            
            System.out.println("Метод: " + hpCon.getRequestMethod());
            System.out.println("Код ответа: " + hpCon.getResponseCode());
            System.out.println("Сообщение ответа: " + hpCon.getResponseMessage());
            
            long len = hpCon.getContentLengthLong();
            if(len != -1)
            {
                 InputStream input = hpCon.getInputStream();
                 while((c=input.read()) != -1)
                 {
                   System.out.print((char)c);  
                 }
                 input.close();
                
            }

Получаю
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     
    Метод: GET
    Код ответа: 200
    Сообщение ответа: OK
    <html><body><h1>It works!</h1>
    <p>This is the default web page for this server.</p>
    <p>The web server software is running but no content has been added, yet.</p>
    </body></html>

Т.е проходит. Как так?
У меня ПК за прокси. Браузер по крайней мере требует данные прокси. Почему тогда проходит вызов из ИДЕ?

Автор: wind 30.11.15, 17:12
потому что java по умолчанию использует "системные" настройки прокси

Добавлено
http://stackoverflow.com/questions/4933677...ting-using-java

Автор: dark_barker 01.12.15, 10:53
Емнип, есть какой-то system property который за это отвечает, типа "использовать системный прокси".

Автор: Kamenev_D 02.12.15, 13:40
Цитата dark_barker @
Емнип, есть какой-то system property который за это отвечает, типа "использовать системный прокси".


Наверное это он
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     System.setProperty("java.net.useSystemProxies","true");

Но вопрос в другом.Почему не требует имя пользователя и пароль?

Автор: Kamenev_D 02.12.15, 15:37
А вот пример без использования System.setProperty("java.net.useSystemProxies","true");
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    //From project ant, under directory /src/main/org/apache/tools/ant/util/java15/, in source file ProxyDiagnostics.java
    **
     * Get the diagnostics for proxy information.
     * @return the information.
     */
    public String toString(){
      ProxySelector selector=ProxySelector.getDefault();
      List list=selector.select(destURI);
      StringBuffer result=new StringBuffer();
      Iterator proxies=list.listIterator();
      while (proxies.hasNext()) {
        Proxy proxy=(Proxy)proxies.next();
        SocketAddress address=proxy.address();
        if (address == null) {
          result.append("Direct connection\n");
        }
     else {
          result.append(proxy.toString());
          if (address instanceof InetSocketAddress) {
            InetSocketAddress ina=(InetSocketAddress)address;
            result.append(' ');
            result.append(ina.getHostName());
            result.append(':');
            result.append(ina.getPort());
            if (ina.isUnresolved()) {
              result.append(" [unresolved]");
            }
     else {
              InetAddress addr=ina.getAddress();
              result.append(" [");
              result.append(addr.getHostAddress());
              result.append(']');
            }
          }
          result.append('\n');
        }
      }
      return result.toString();
    }

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)