2017-02-21 6 views
0

Я пишу метод отправки запроса GET конечной точке и разбора текста ответа как json.Соединение было отклонено при получении входного потока от google

public static KafkaConnection getKafkaConnection(String sUrl) throws IOException { 
    URL url=new URL(sUrl); 
    HttpURLConnection con=(HttpURLConnection)url.openConnection(); 
    con.setRequestMethod("GET"); 
    InputStream is = con.getInputStream(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder builder = new StringBuilder(); 
    for (String line = null; (line = reader.readLine()) != null;) { 
     builder.append(line).append("\n"); 
    } 
    String jsonText = builder.toString(); 
    JSONObject json = new JSONObject(jsonText); 
    KafkaConnection kc = new KafkaConnection(); 
    JSONArray array = json.getJSONArray("address"); 
    List<String> list = new ArrayList<String>(); 
    for (int i = 0; i < array.length(); i++) { 
     list.add(array.getString(i)); 
    } 
    kc.setAddresses(list); 
    kc.setZookeeper(json.getString("zookeeper")); 
    return kc; 
} 

Однако я получаю "Connection отказался" ошибка в строке InputStream is = con.getInputStream();. для любого URL. Даже http://www.google.com. Эти URL-адреса доступны из браузера или с помощью команды curl на том же компьютере. Что вызывает отказ соединения с использованием HttpUrlConnection?

Ниже трассировки стека:

Exception in thread "main" java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:589) 
    at java.net.Socket.connect(Socket.java:538) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) 
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:211) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:308) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:326) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) 
    at com.lgc.dist.plat.test.kafka.KafkaTestUtils.getKafkaConnection(KafkaTestUtils.java:30) 
    at com.lgc.dist.plat.test.kafka.KafkaTestUtils.main(KafkaTestUtils.java:54) 

EDIT Основываясь на ответах, выглядит как консенсус в том, что это вопрос брандмауэра.

я установить переменные окружения http_proxy и https_proxy к следующим за моим компьютером https://user:[email protected]:80

Поэтому я добавил следующий код перед соединением:

System.setProperty("http.proxyHost", "https://np1prxy801.corp.company.com"); 
    System.setProperty("http.proxyPort", "80"); 
    String user = "user"; 
    String password = "pass"; 
    Authenticator.setDefault(
     new Authenticator() { 
      @Override 
      public PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication(
        user, password.toCharArray()); 
      } 
     } 
    ); 

Однако, я все еще получаю connection refused ошибку ,

+1

может быть, вы работаете в корпоративной среде, где необходимо указать веб прокси-сервер? – MeBigFatGuy

+0

@MeBigFatGuy мы используем прокси-сервер, но это глобальная настройка для компьютера, не так ли? Я не понимаю, почему он не работает внутри Java IDE, когда он работает с использованием браузера на том же компьютере? – ddd

ответ

0

Наконец получил его на работу со следующим кодом на основе двух других сообщений, Eclipse Outbound connection blocked : The same url works from web browser и How do I make HttpURLConnection use a proxy?

Proxy proxy = new Proxy(Proxy.Type.HTTP, 
      new InetSocketAddress("np1prxy801.corp.abc.com", 80)); 
    URL url=new URL(sUrl); 
    HttpURLConnection con = (HttpURLConnection)url.openConnection(proxy); 

    String user = "user"; 
    String password = "password"; 
    Authenticator.setDefault(
     new Authenticator() { 
      @Override 
      public PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication(
        user, password.toCharArray()); 
      } 
     } 
    ); 

    con.setRequestMethod("GET"); 
    InputStream is = con.getInputStream(); 
1

Прежде чем пытаться подключиться, попробуйте

System.setProperty ("http.proxyHost", "your.proxy.server.com"); System.setProperty ("http.proxyPort", "{ваш прокси-порт}");

в качестве эксперимента

+0

Я установил их в коде, по-прежнему ту же ошибку. Смотрите мои изменения в сообщении. – ddd

Смежные вопросы