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:

  1. "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);
    
  2. 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
    
  3. Custom RoutePlanner implementation (I did not explore this option)


You have many possibility to configure proxy in java :

  1. 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

  1. 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();
    
  2. 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 : bottom toolbar
(source: comexis.eu)


The second method should work, however the properties are http.proxyHost and http.proxyPort.