尝试使用代理创建HTTPUrlConnection时出现UnknownHostException

时间:2015-06-18 17:43:38

标签: java proxy httpurlconnection

使用Java,我尝试通过本地代理http://www.oracle.com连接并从http://www-my.proxy.address.com获取响应代码。

我试过了:

public void testAConnection() throws IOException {
    String urlText = "http://www.oracle.com";

    System.setProperty("http.proxyHost", "http://www-my.proxy.address.com");
    System.setProperty("http.proxyPort", "80");

    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("http://www-my.proxy.address.com", 80));
    URL url = new URL(urlText);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
    int responseCode = conn.getResponseCode();
    System.out.println(responseCode);
}

引发:

java.net.UnknownHostException: ...

以及:

Proxy proxy = new Proxy(Proxy.Type.DIRECT, new InetSocketAddress("http://www-my.proxy.address.com", 80));
URL url = new URL(urlText);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);

后者抛出:

ava.lang.IllegalArgumentException: type DIRECT is not compatible with address ...

对于解决了这个问题的其他人来说,第二种方法似乎通常都有效。任何帮助表示赞赏!

编辑:在绞尽脑汁试图找出问题之后,我重新启动了IDE,一切似乎都在运行。感谢您的反馈。

3 个答案:

答案 0 :(得分:1)

Type.HTTP是正确的。但是,我怀疑您的系统是否无法解析您的代理IP。检查DNS设置或手动在/ etc / hosts中添加www-my.proxy.address.com

条目

答案 1 :(得分:0)

在调用getResponseCode()之前必须先连接,请尝试以下代码:

 public void testAConnection() throws IOException {
 String urlText = "http://www.oracle.com";
 Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("http://www-my.proxy.address.com", 80));
 URL url = new URL(urlText);
 HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
 conn.connect();
 int responseCode = conn.getResponseCode();
 System.out.println(responseCode);

}

答案 2 :(得分:0)

http.proxyHost属性需要一个主机名。

http.proxyHost:代理服务器的主机名

您还要使用协议(http://)指定代理。 仅设置主机名即可解决该问题。

例如

System.setProperty("http.proxyHost", "www-my.proxy.address.com");