Configuring Eclipse to allow Fiddler to intercept requests
HttpClient
needs to be made aware of the proxy information. Several approaches can be used:
See 2.7 in HTTP Component's documentation:
"Connect to the target host via a proxy is by setting the default proxy parameter"
DefaultHttpClient httpclient = new DefaultHttpClient(); HttpHost proxy = new HttpHost("127.0.0.1", 8888); httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
Using "the standard JRE proxy selector to obtain proxy information"
DefaultHttpClient httpclient = new DefaultHttpClient(); ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner( httpclient.getConnectionManager().getSchemeRegistry(), ProxySelector.getDefault()); httpclient.setRoutePlanner(routePlanner);
and then adding the following as VM arguments:
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888
Custom
RoutePlanner
implementation (I did not explore this option)
You have many possibility to configure proxy in java :
- Using system properties
- via VM arguments (assuming you want to enable proxy for http and https traffic) :
java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888
via System properties :
// Get system properties Properties sysProperties = System.getProperties(); // Specify proxy settings sysProperties.put("https.proxyHost", "127.0.0.1"); sysProperties.put("https.proxyPort", "8888"); sysProperties.put("http.proxyHost", "127.0.0.1"); sysProperties.put("http.proxyPort", "8889");
The "disavdantage" of this method : once the proxy is set for a protocol, all connection for that protocol will use the proxy
java.net.Proxy : available since java 1.5. Allow you to specify a proxy configuration to use for opening a connection
SocketAddress addr = new InetSocketAddress("127.0.0.1", 8888); Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); URL url = new URL("http://stackoverflow.com/"); InputStream in = url.openConnection(proxy).getInputStream();
ProxySelector class : available since Java 1.5. allow you to select a proxy by URI ! It's an abstract class, a simple implementation returning your proxy for all http and https connection looks like :
public static class MyProxySelector extends ProxySelector { private List<Proxy> proxy; private List<Proxy> noProxy; MyProxySelector() { proxy = new ArrayList<Proxy>(); SocketAddress addr = new InetSocketAddress("127.0.0.1", 8888); proxy.add(new Proxy(Proxy.Type.HTTP, addr)); noProxy = new ArrayList<Proxy>(); noProxy.add(Proxy.NO_PROXY); } public List<Proxy> select(URI uri) { System.err.println("Connection to the proxy for uri :"+uri); if (uri == null) { throw new IllegalArgumentException("URI can't be null."); } String protocol = uri.getScheme(); if ("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol)) { //if http or https connection, return our proxy config return proxy; } else { // Otherwise don't use a proxy return noProxy; } } @Override public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { System.err.println("Connection to the proxy failed !"); //throw exception or do some stuff... } }
And set your proxy selector as default proxy selector
public static void main(String[] args){
ProxySelector.setDefault(new MyProxySelector());
//...
}
I prefer this last mechanism because you can put some logging and see wath Java is doing !
Important remark :
By default, Fiddler captures only traffic coming from web-browsers !! Change that to capture traffic of all processes :
(source: comexis.eu)
The second method should work, however the properties are http.proxyHost
and http.proxyPort
.