通过代理连接到Java中的URL

时间:2011-12-07 21:05:17

标签: java

我正在尝试使用URL连接库编写一个连接到Twitter搜索URL(返回推文的JSON列表)的小型Java程序。

我从java教程中获取的代码如下:

        public static void main(String[] args) throws Exception {
        URL oracle = new URL("http://search.twitter.com/search.json?q=hi");
        URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                yc.getInputStream()));
        String inputLine;

        while ((inputLine = in.readLine()) != null) 
            System.out.println(inputLine);
        in.close();
    }

但由于某种原因,我不断收到以下例外:

in thread "main" java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)

我不知道这是否是由于我编写代码的方式,eclipse设置或与我的网络有关。我确实有一个配置为Internet访问的代理服务器。据我所知,这是正确配置的,因为我正在获取更新,可以通过eclipse安装新软件。我是否需要以某种方式将代理信息放在URL方法中,或者是其他问题。

2 个答案:

答案 0 :(得分:5)

URL依赖于代理的系统属性,尝试设置代理如下:

System.setProperty("http.proxyHost", "yourproxyserver");
System.setProperty("http.proxyPort", "portnumber");

答案 1 :(得分:4)

不幸的是,Eclipse中正确的代理设置似乎无助于代理在Eclipse中启动的Java程序。同样,将Java系统设置设置为使用系统范围的代理设置也不会。无论如何,当您拥有需要身份验证的代理时,情况并非如此。

正如Thomas Johan Eggum所说,如果您有一个“正常的”非身份验证代理,那么可以通过http.proxyHost在命令行中设置两个JVM变量http.proxyPort-D,或者以编程方式(见下文)将处理事情。

对于身份验证代理服务器,即想要查看用户ID和密码的代理服务器,很多人建议设置http.proxyUserhttp.proxyPassword。这是不好的建议,因为这些不起作用。显然,他们在Java文档中 not 定义。

不幸的是,“do”身份验证的方式似乎是以编程方式使用Authenticator。如果你打算这样做,你不妨以编程方式完成所有事情,即包括主机和端口。以下是我的工作方式:

   public static void main(String[] args) {
      try {

         System.setProperty("http.proxyHost", "my.proxy.host");
         System.setProperty("http.proxyPort", "8080-or-whatever-proxy-port");
         Authenticator.setDefault(new DummyAuthenticator());

         /* do your main program stuff */             

      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   private static class DummyAuthenticator extends Authenticator {
      public PasswordAuthentication getPasswordAuthentication() {
         return new PasswordAuthentication(
               "my-user-id", "my-password".toCharArray()
               );
      }
   }