mirror of https://github.com/apache/jclouds.git
Issue 122: add proxy config to default http provider
This commit is contained in:
parent
785ce56d3f
commit
d670ecfa6d
|
@ -87,6 +87,31 @@ public interface Constants {
|
||||||
* Whether or not to use the proxy setup from the underlying operating system.
|
* Whether or not to use the proxy setup from the underlying operating system.
|
||||||
*/
|
*/
|
||||||
public static final String PROPERTY_PROXY_SYSTEM = "jclouds.use_system_proxy";
|
public static final String PROPERTY_PROXY_SYSTEM = "jclouds.use_system_proxy";
|
||||||
|
/**
|
||||||
|
* String property.
|
||||||
|
* <p/>
|
||||||
|
*Explicitly sets the host name of a HTTP proxy server.
|
||||||
|
*/
|
||||||
|
public static final String PROPERTY_PROXY_HOST = "jclouds.proxy_host";
|
||||||
|
/**
|
||||||
|
* Integer property.
|
||||||
|
* <p/>
|
||||||
|
* Explicitly sets the port number of a HTTP proxy server.
|
||||||
|
*/
|
||||||
|
public static final String PROPERTY_PROXY_PORT = "jclouds.proxy_port";
|
||||||
|
/**
|
||||||
|
* String property.
|
||||||
|
* <p/>
|
||||||
|
* Explicitly sets the user name credential for proxy authentication.
|
||||||
|
*/
|
||||||
|
public static final String PROPERTY_PROXY_USER = "jclouds.proxy_user";
|
||||||
|
/**
|
||||||
|
* String property.
|
||||||
|
* <p/>
|
||||||
|
* Explicitly sets the password credential for proxy authentication.
|
||||||
|
*/
|
||||||
|
public static final String PROPERTY_PROXY_PASSWORD = "jclouds.proxy_password";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Integer property.
|
* Integer property.
|
||||||
* <p/>
|
* <p/>
|
||||||
|
|
|
@ -26,7 +26,11 @@ import static org.jclouds.Constants.PROPERTY_MAX_CONNECTION_REUSE;
|
||||||
import static org.jclouds.Constants.PROPERTY_MAX_REDIRECTS;
|
import static org.jclouds.Constants.PROPERTY_MAX_REDIRECTS;
|
||||||
import static org.jclouds.Constants.PROPERTY_MAX_RETRIES;
|
import static org.jclouds.Constants.PROPERTY_MAX_RETRIES;
|
||||||
import static org.jclouds.Constants.PROPERTY_MAX_SESSION_FAILURES;
|
import static org.jclouds.Constants.PROPERTY_MAX_SESSION_FAILURES;
|
||||||
|
import static org.jclouds.Constants.PROPERTY_PROXY_HOST;
|
||||||
|
import static org.jclouds.Constants.PROPERTY_PROXY_PASSWORD;
|
||||||
|
import static org.jclouds.Constants.PROPERTY_PROXY_PORT;
|
||||||
import static org.jclouds.Constants.PROPERTY_PROXY_SYSTEM;
|
import static org.jclouds.Constants.PROPERTY_PROXY_SYSTEM;
|
||||||
|
import static org.jclouds.Constants.PROPERTY_PROXY_USER;
|
||||||
import static org.jclouds.Constants.PROPERTY_RELAX_HOSTNAME;
|
import static org.jclouds.Constants.PROPERTY_RELAX_HOSTNAME;
|
||||||
import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT;
|
import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT;
|
||||||
import static org.jclouds.Constants.PROPERTY_USER_THREADS;
|
import static org.jclouds.Constants.PROPERTY_USER_THREADS;
|
||||||
|
@ -59,6 +63,38 @@ public abstract class PropertiesBuilder {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.jclouds.Constants.PROPERTY_PROXY_HOST
|
||||||
|
*/
|
||||||
|
public PropertiesBuilder withProxyHost(String proxyHost) {
|
||||||
|
properties.setProperty(PROPERTY_PROXY_HOST, proxyHost);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.jclouds.Constants.PROPERTY_PROXY_PORT
|
||||||
|
*/
|
||||||
|
public PropertiesBuilder withProxyPort(int proxyPort) {
|
||||||
|
properties.setProperty(PROPERTY_PROXY_PORT, Integer.toString(proxyPort));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.jclouds.Constants.PROPERTY_PROXY_USER
|
||||||
|
*/
|
||||||
|
public PropertiesBuilder withProxyUser(String proxyUser) {
|
||||||
|
properties.setProperty(PROPERTY_PROXY_USER, proxyUser);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.jclouds.Constants.PROPERTY_PROXY_PASSWORD
|
||||||
|
*/
|
||||||
|
public PropertiesBuilder withProxyPassword(String proxyPassword) {
|
||||||
|
properties.setProperty(PROPERTY_PROXY_PASSWORD, proxyPassword);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.jclouds.Constants.PROPERTY_SO_TIMEOUT
|
* @see org.jclouds.Constants.PROPERTY_SO_TIMEOUT
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -74,6 +74,18 @@ public class HttpUtils {
|
||||||
private final int globalMaxConnectionsPerHost;
|
private final int globalMaxConnectionsPerHost;
|
||||||
private final int connectionTimeout;
|
private final int connectionTimeout;
|
||||||
private final int soTimeout;
|
private final int soTimeout;
|
||||||
|
@Inject(optional = true)
|
||||||
|
@Named(Constants.PROPERTY_PROXY_HOST)
|
||||||
|
private String proxyHost;
|
||||||
|
@Inject(optional = true)
|
||||||
|
@Named(Constants.PROPERTY_PROXY_PORT)
|
||||||
|
private Integer proxyPort;
|
||||||
|
@Inject(optional = true)
|
||||||
|
@Named(Constants.PROPERTY_PROXY_USER)
|
||||||
|
private String proxyUser;
|
||||||
|
@Inject(optional = true)
|
||||||
|
@Named(Constants.PROPERTY_PROXY_PASSWORD)
|
||||||
|
private String proxyPassword;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public HttpUtils(@Named(Constants.PROPERTY_CONNECTION_TIMEOUT) int connectionTimeout,
|
public HttpUtils(@Named(Constants.PROPERTY_CONNECTION_TIMEOUT) int connectionTimeout,
|
||||||
|
@ -86,6 +98,34 @@ public class HttpUtils {
|
||||||
this.globalMaxConnectionsPerHost = globalMaxConnectionsPerHost;
|
this.globalMaxConnectionsPerHost = globalMaxConnectionsPerHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.jclouds.Constants.PROPERTY_PROXY_HOST
|
||||||
|
*/
|
||||||
|
public String getProxyHost() {
|
||||||
|
return proxyHost;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.jclouds.Constants.PROPERTY_PROXY_PORT
|
||||||
|
*/
|
||||||
|
public Integer getProxyPort() {
|
||||||
|
return proxyPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.jclouds.Constants.PROPERTY_PROXY_USER
|
||||||
|
*/
|
||||||
|
public String getProxyUser() {
|
||||||
|
return proxyUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.jclouds.Constants.PROPERTY_PROXY_PASSWORD
|
||||||
|
*/
|
||||||
|
public String getProxyPassword() {
|
||||||
|
return proxyPassword;
|
||||||
|
}
|
||||||
|
|
||||||
public int getSocketOpenTimeout() {
|
public int getSocketOpenTimeout() {
|
||||||
return soTimeout;
|
return soTimeout;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,9 +23,13 @@ import java.io.FilterInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.net.Authenticator;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.net.PasswordAuthentication;
|
||||||
import java.net.Proxy;
|
import java.net.Proxy;
|
||||||
import java.net.ProxySelector;
|
import java.net.ProxySelector;
|
||||||
|
import java.net.SocketAddress;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
|
|
||||||
|
@ -106,7 +110,6 @@ public class JavaUrlHttpCommandExecutorService extends
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public InputStream consumeOnClose(InputStream in) {
|
public InputStream consumeOnClose(InputStream in) {
|
||||||
return new ConsumeOnCloseInputStream(in);
|
return new ConsumeOnCloseInputStream(in);
|
||||||
}
|
}
|
||||||
|
@ -138,7 +141,6 @@ public class JavaUrlHttpCommandExecutorService extends
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private InputStream bufferAndCloseStream(InputStream inputStream) throws IOException {
|
private InputStream bufferAndCloseStream(InputStream inputStream) throws IOException {
|
||||||
InputStream in = null;
|
InputStream in = null;
|
||||||
try {
|
try {
|
||||||
|
@ -161,6 +163,17 @@ public class JavaUrlHttpCommandExecutorService extends
|
||||||
Iterable<Proxy> proxies = ProxySelector.getDefault().select(request.getEndpoint());
|
Iterable<Proxy> proxies = ProxySelector.getDefault().select(request.getEndpoint());
|
||||||
Proxy proxy = Iterables.getLast(proxies);
|
Proxy proxy = Iterables.getLast(proxies);
|
||||||
connection = (HttpURLConnection) url.openConnection(proxy);
|
connection = (HttpURLConnection) url.openConnection(proxy);
|
||||||
|
} else if (utils.getProxyHost() != null) {
|
||||||
|
SocketAddress addr = new InetSocketAddress(utils.getProxyHost(), utils.getProxyPort());
|
||||||
|
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
|
||||||
|
Authenticator authenticator = new Authenticator() {
|
||||||
|
public PasswordAuthentication getPasswordAuthentication() {
|
||||||
|
return (new PasswordAuthentication(utils.getProxyUser(), utils.getProxyPassword()
|
||||||
|
.toCharArray()));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Authenticator.setDefault(authenticator);
|
||||||
|
connection = (HttpURLConnection) url.openConnection(proxy);
|
||||||
} else {
|
} else {
|
||||||
connection = (HttpURLConnection) url.openConnection();
|
connection = (HttpURLConnection) url.openConnection();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue