使用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,一切似乎都在运行。感谢您的反馈。
答案 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");