2015-08-31 2 views
4

Я пытаюсь сделать простой HTTP-запрос, используя HttpURLConnection. Я получаю эту ошибку, время ожидания подключения. Я использую intellij IDEA и правильно устанавливаю прокси. Проверьте соединение в настройках, говорит, что соединение имеет успех. Что могло бы пойти не так? Вот мой код.Ошибка таймаута соединения в intellij Идея

import java.io.*; 
import java.net.*; 

/** 
* Created by admin on 22/8/15. 
*/ 
public class Hello { 
    public static void main(String [] args) 
    { 
     try 
     { 
      URL url = new URL("http://www.google.com"); 
      URLConnection urlConnection = url.openConnection(); 
      HttpURLConnection connection = null; 
      if(urlConnection instanceof HttpURLConnection) 
      { 
       connection = (HttpURLConnection) urlConnection; 
      } 
      else 
      { 
       System.out.println("Please enter an HTTP URL."); 
       return; 
      } 
      BufferedReader in = new BufferedReader(
        new InputStreamReader(connection.getInputStream())); 
      String urlString = ""; 
      String current; 
      while((current = in.readLine()) != null) 
      { 
       urlString += current; 
      } 
      System.out.println(urlString); 
     }catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

Ошибка заключается в следующем

java.net.ConnectException: Connection timed out 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
    at java.net.Socket.connect(Socket.java:529) 
    at java.net.Socket.connect(Socket.java:478) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:394) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:529) 
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:233) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:306) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:323) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049) 
    at Hello.main(Hello.java:24) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 

Process finished with exit code 0 

пс: Используя свойства системы в коде делает работу. Но это невозможно для моих целей. Для этого есть какая-то работа. Я не хочу писать код следующим образом, т. Е. Удалять некоторые строки из производства. И следующее работает отлично.

import java.io.*; 
import java.net.*; 
import java.util.Properties; 

/** 
* Created by admin on 22/8/15. 
*/ 
public class Hello { 

    // This method should be removed in production 
    static void setProxy(){ 
     Properties systemProperties = System.getProperties(); 
     systemProperties.setProperty("http.proxyHost","lotus"); 
     systemProperties.setProperty("http.proxyPort", "8080"); 
    } 
    public static void main(String [] args) 
    { 
     try 
     { 

      setProxy(); 
      URL url = new URL("http://www.google.com"); 
      URLConnection urlConnection = url.openConnection(); 
      HttpURLConnection connection = null; 
      if(urlConnection instanceof HttpURLConnection) 
      { 
       connection = (HttpURLConnection) urlConnection; 
      } 
      else 
      { 
       System.out.println("Please enter an HTTP URL."); 
       return; 
      } 
      BufferedReader in = new BufferedReader(
        new InputStreamReader(connection.getInputStream())); 
      String urlString = ""; 
      String current; 
      while((current = in.readLine()) != null) 
      { 
       urlString += current; 
      } 
      System.out.println(urlString); 
     }catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

возможно дубликат (HTTP [Как мне сделать HttpURLConnection использовать прокси-сервер?]: // StackOverflow. com/questions/1432961/how-do-i-make-httpurlconnection-use-a-proxy) –

+0

Я не хочу использовать прокси-сервер в своем коде, это невозможно для моей цели @RC – gates

+0

Я проверил ваш код на мой IntelliJ 11, и все получилось отлично. –

ответ

0

Создайте два файла свойств с тем же именем (proxy.properties). Используйте тот, который содержит:

http.proxyHost=lotus 
http.proxyPort=8080 

... для развития и тот, который содержит:

http.proxyHost= 
http.proxyPort= 

должны быть отправлены в прод.

Тогда в классе выше:

static Proxy getProxy() throws IOException { 
    Properties proxyProperties = new Properties(); 
    InputStream inputStream = null; 
    try { 
     inputStream = Hello.getClass().getClassLoader().getResourceAsStream("proxy.properties"); 
     proxyProperties.load(inputStream); 
    } finally { 
     if(inputStream != null) { 
      try { 
       inputStream.close(); 
      } catch(IOException ioe) { 
      } 
     } 
    } 
    String proxyHost = proxyProperties.getProperty("http.proxyHost"); 
    if(proxyHost != null && proxyHost.length() > 0)) { 
     String proxyPort = proxyProperties.getProperty("http.proxyPort"); 
     SocketAddress addr = new InetSocketAddress(proxyHost, Integer.parseInt(proxyPort)); 
     return new Proxy(Proxy.Type.HTTP, addr); 
    } 
    return null; 
} 

Затем в основной метод:

... 
URL url = new URL("http://www.google.com"); 
URLConnection urlConnection; 
Proxy = getProxy(); 
if(proxy != null) { 
    urlConnection = url.openConnection(proxy); 
} else { 
    urlConnection = url.openConnection(); 
HttpURLConnection connection = null; 
... 
+0

Я оставляю вас для добавления соответствующей обработки исключений. – Jason

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