我创建了一个通过互联网发布内容的服务,一切都很好。但是当我将它部署到我们的服务器时,我得到连接状态:403,禁止。我认为这是因为我们的服务器不允许在没有登录的情况下直接访问互联网。我们必须先使用我们的用户名/密码在浏览器中登录才能访问互联网。
我注意到如果我登录并访问服务器中的互联网,我部署的服务运行正常。但我不认为这是实际的,因为在这种情况下,如果有人或我没有先登录,我的服务将无法运行。
我已尝试在java代码中设置代理但无济于事。有人可以帮我解决这个问题吗?这是我发布我的服务片段。
System.getProperties().put("http.proxySet", "true");
System.getProperties().put("http.proxyHost", myHost);
System.getProperties().put("http.proxyPort", "8080");
System.getProperties().put("http.proxyUser", myUser);
System.getProperties().put("http.proxyPassword", myPassword);
System.getProperties().put("http.nonProxyHosts", "localhost|127.0.0.1");
try {
URL url = new URL(urlAddress);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
...
if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
System.out.println("connection OK");
istrm = con.getInputStream();
if (istrm == null) {
System.out.println("istrm == null");
}
...
} else {
System.out.println("Response: " + con.getResponseCode() + ", " + con.getResponseMessage());
}
}
我的进程转到else阻止并获得响应消息403
答案 0 :(得分:4)
尝试使用System.setProperty(String,String)。
答案 1 :(得分:3)
这是您设置应用程序范围代理的方法..
System.setProperty("https.proxyHost", "myproxy.domain.com");
System.setProperty("https.proxyPort", "myport");
注意:如果您不需要https,请使用http.proxyHost
和http.proxyPort
。
答案 2 :(得分:1)
我认为问题在于你设置属性太晚了。 HTTP请求路由器代码很可能在初始化期间读取一次的属性。如果您的代码在HTTP请求路由器初始化后设置属性,则新属性值将无效...除非您可以使请求路由器重新初始化。
保证代理属性设置生效的一种方法是在启动Web服务器的java命令行上设置它们;例如在Linux上使用Tomcat,您可以通过在JAVA_OPTS
环境变量中设置相关的“-D ...”选项来完成此操作。
答案 3 :(得分:1)
如果您在系统上使用代理...(我的意思是在您的操作系统上) 你可以使用这行代码:
System.setProperty("java.net.useSystemProxies", "true");