【问题标题】:set proxy in java在java中设置代理
【发布时间】:2011-03-16 02:14:36
【问题描述】:

我创建了一个通过互联网发布内容的服务,一切都很好。但是当我将它部署到我们的服务器时,我得到连接状态:403,禁止。我认为这是因为我们的服务器不允许在没有先登录的情况下直接访问互联网。我们必须先使用我们的用户名/密码在浏览器中登录才能访问互联网。

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

我尝试在 java 代码中设置代理,但无济于事。有人可以帮我解决这个问题吗?这是我发布我的服务 sn-p。

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

【问题讨论】:

  • http.proxySet 是一个都市神话。它没有效果。

标签: java proxy


【解决方案1】:

尝试改用 System.setProperty(String, String)。

【讨论】:

  • 我认为这不会有帮助。 System.getProperties() 返回系统属性对象...不是副本。
  • @Stephen 看了JDK源码,我同意。 +1 为您的 -D 答案。
【解决方案2】:

这就是您设置应用程序范围代理的方式..

System.setProperty("https.proxyHost", "myproxy.domain.com"); 
System.setProperty("https.proxyPort", "myport"); 

注意:如果您不需要 https,请使用 http.proxyHosthttp.proxyPort

【讨论】:

    【解决方案3】:

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

    保证代理属性设置生效的一种方法是在启动 Web 服务器的 java 命令行上设置它们;例如使用 Linux 上的 Tomcat,您可以通过在 JAVA_OPTS 环境变量中设置相关的“-D...”选项来做到这一点。

    【讨论】:

      【解决方案4】:

      如果您在系统上使用代理...(我的意思是在您的操作系统上) 你可以使用这行代码:

      System.setProperty("java.net.useSystemProxies", "true");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多