2011-03-16 94 views
3

我创建一个服务,通过互联网发布的东西,一切都很好。但是当我将它部署到我们的服务器时,我得到连接状态:403,禁止。我认为这是因为我们的服务器不允许直接访问互联网,而无需先登录。我们必须首先在浏览器中用我们的用户名/密码登录才能访问互联网。在Java中设置代理

我注意到,如果我登录并访问服务器中的互联网,我部署的服务运行正常。但我不认为这很实际,因为在那种情况下,如果有人或我不先登录,我的服务将无法运行。

我曾尝试在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()); 
      } 
} 

而我处理转到别的块,并得到响应消息403

+1

http.proxySet是一个城市神话。它没有效果。 – EJP 2012-04-11 18:59:44

回答

4

尝试使用System.setProperty(字符串,字符串)来代替。

+1

我不认为这会有所帮助。 'System.getProperties()'返回系统属性对象...不是副本。 – 2011-03-16 03:19:13

+0

@Stephen查看JDK源代码,我同意。 +1为你的-D答案。 – 2011-03-16 14:44:21

1

我认为问题在于你设置的属性太晚了。 HTTP请求路由器代码很可能在初始化期间读取一次的属性。如果您的代码在HTTP请求路由器初始化后设置了属性,则新的属性值将不起作用,除非您可以使请求路由器重新初始化。

确保代理属性设置生效的一种方法是在启动Web服务器的Java命令行上设置它们;例如在Linux上使用Tomcat时,可​​以通过在JAVA_OPTS环境变量中设置相关的“-D ...”选项来执行此操作。

3

这是你如何设置应用程序范围内代理..

注意:使用http.proxyHosthttp.proxyPort如果你不需要HTTPS。