Search code examples
eclipsefiddler

Configuring Eclipse to allow Fiddler to intercept requests


In Eclipse there are two places that I've attempted to configure so that Fiddler can intercept the HTTP/HTTPS requests that I'm sending out:

  1. Windows > Preference > General > Network Connections - I've tried Native/Direct/Manual
  2. In VM arguments, I add the following -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888

EDIT: I've tried the new properties suggested by rgerganov as well.

I haven't touched any "network" related settings in Fiddler and I've set it to monitor all processes.

I tried with Wireshark and I was able to intercept the requests with no modifications to Eclipse but information presented in Wireshark is too in-depth and I don't need most of the details provided by Wireshark.

EDIT: Here's the sample code which I'm trying:

public static void doPOST() {
    String post_url = "https://lookup.mxtelecom.com/USLookup";

    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion( params, HttpVersion.HTTP_1_1 );
    HttpProtocolParams.setContentCharset( params, "UTF-8" );
    HttpProtocolParams.setUseExpectContinue( params, true );

    SchemeRegistry supportedSchemes = new SchemeRegistry();
    supportedSchemes.register( new Scheme( "https", SSLSocketFactory.getSocketFactory(), 443 ) );
    supportedSchemes.register( new Scheme( "http", PlainSocketFactory.getSocketFactory(), 80 ) );

    ClientConnectionManager ccm = new ThreadSafeClientConnManager( params, supportedSchemes );
    HttpClient m_Client = new DefaultHttpClient( ccm, params );

    HttpPost httpPost = new HttpPost( post_url );

    List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
    postParameters.add( new BasicNameValuePair( "something", "useful" ) );

    ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
      @Override
      public String handleResponse( HttpResponse response ) throws ClientProtocolException, IOException {
        if ( response.getEntity() != null ) {
          return EntityUtils.toString( response.getEntity() );
        }

        return null;
      }
    };

    try {
      UrlEncodedFormEntity entity = new UrlEncodedFormEntity( postParameters, "UTF-8" );
      httpPost.setEntity( entity );
      results = m_Client.execute( httpPost, responseHandler );

    } catch ( ClientProtocolException e ) {
      e.printStackTrace();
    } catch ( IOException e ) {
      e.printStackTrace();
    }
  }

Eclipse Build id: 20100218-1602 // 3.5.2.R35x
Fiddler2 v2.3.2.6
jdk1.6.0_21

Please let me know if you need any other information.


Solution

  • 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)