我有一个运行在Heroku上的Java应用程序,它需要访问Salesforce,它只允许您从白名单中的IP访问API。比昔莫是一个Heroku外接程序,允许您通过一个静态IP服务器代理应用程序提出的所有请求。不幸的是,这样做的标准方法是在Proximo的包装器中运行应用程序-mucks为我的应用程序的way服务器对很多人来说创建一个监听套接字。
如何在Java应用程序中使用Proximo作为SOCKS代理?
发布于 2014-02-19 16:47:25
我查看了他们分发的堆垛作为前面提到的包装器,并看到它以SOCKS代理的形式连接到Proximo服务器。这在Java中很容易实现,所以我将其添加到应用程序(Groovy语法)的启动中:
URL proximo = new URL(System.getenv('PROXIMO_URL')
String userInfo = proximo.getUserInfo()
String user = userInfo.substring(0, userInfo.indexOf(':'))
String password = userInfo.substring(userInfo.indexOf(':') + 1)
System.setProperty('socksProxyHost', proximo.getHost())
System.setProperty('socksProxyPort', '1080')
Authenticator.setDefault(new ProxyAuth(user, password))这个ProxyAuth是其他地方的一个内部类:
private class ProxyAuth extends Authenticator {
    private PasswordAuthentication passwordAuthentication;
    private ProxyAuth(String user, String password) {
        passwordAuthentication = new PasswordAuthentication(user, password.toCharArray())
    }
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return passwordAuthentication;
    }
}发布于 2014-12-17 09:29:27
这里描述的是什么样的基于java的web应用程序?我有一个基于Spring 的web应用程序,遇到了与这里提到的相同的问题。
我尝试了在我的应用程序中配置SOCKS代理的两种方法:
我的Java类加载为bean:
package be.example.backend.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.Authenticator;
import java.net.MalformedURLException;
import java.net.PasswordAuthentication;
import java.net.URL;
public class ProximoSocksConfig {
    private static final Logger LOGGER = LoggerFactory.getLogger(ProximoSocksConfig.class);
    private static final String PROXIMO_ENV_VAR = "PROXIMO_URL";
    private static final String PROXIMO_PORT = "1080";
    public ProximoSocksConfig() throws MalformedURLException {
        setup();
    }
    /**
     * Setup Proximo proxying
     *
     * @return True if Proximo was configured, false if the Proximo environment variable was not found
     */
    public static boolean setup() throws MalformedURLException {
        String proximoUrl = System.getenv(PROXIMO_ENV_VAR);
        if (proximoUrl != null) {
            URL proximo = new URL(proximoUrl);
            String userInfo = proximo.getUserInfo();
            String user = userInfo.substring(0, userInfo.indexOf(':'));
            String password = userInfo.substring(userInfo.indexOf(':') + 1);
            String host = proximo.getHost();
            System.setProperty("socksProxyHost", host);
            System.setProperty("socksProxyPort", PROXIMO_PORT);
            Authenticator.setDefault(new ProxyAuth(user, password));
            LOGGER.info("{} specified; using <{}:{}> {}:{} as SOCKS proxy", PROXIMO_ENV_VAR, user, password, host,
                    PROXIMO_PORT);
            return true;
        }
        LOGGER.info("{} environment variable not set", PROXIMO_ENV_VAR);
        return false;
    }
    private static class ProxyAuth extends Authenticator {
        private final PasswordAuthentication passwordAuthentication;
        private ProxyAuth(String user, String password) {
            passwordAuthentication = new PasswordAuthentication(user, password.toCharArray());
        }
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return passwordAuthentication;
        }
    }
}基于我的XML的根应用程序上下文
<!-- Proximo SOCKS proxy configuration -->
<bean id="proximoSocksConfig" class="be.example.backend.configuration.ProximoSocksConfig"/>我再也没有收到绑定错误,因为不再使用proximo二进制包装器,但是我的应用程序无法在Proximo提供的公共IP地址上访问(我使用Proximo Starters包)。
https://stackoverflow.com/questions/21886916
复制相似问题