我正在尝试使用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方法中,或者是其他问题。
答案 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.proxyUser
和http.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()
);
}
}