Project: rain-workload-toolkit
/*
 * ==================================================================== 
 * Licensed to the Apache Software Foundation (ASF) under one 
 * or more contributor license agreements.  See the NOTICE file 
 * distributed with this work for additional information 
 * regarding copyright ownership.  The ASF licenses this file 
 * to you under the Apache License, Version 2.0 (the 
 * "License"); you may not use this file except in compliance 
 * with the License.  You may obtain a copy of the License at 
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, 
 * software distributed under the License is distributed on an 
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 * KIND, either express or implied.  See the License for the 
 * specific language governing permissions and limitations 
 * under the License. 
 * ==================================================================== 
 * 
 * This software consists of voluntary contributions made by many 
 * individuals on behalf of the Apache Software Foundation.  For more 
 * information on the Apache Software Foundation, please see 
 * <http://www.apache.org/>. 
 * 
 */
 
package org.apache.http.examples.client; 
 
import org.apache.http.Header; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpHost; 
import org.apache.http.HttpResponse; 
import org.apache.http.HttpVersion; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.conn.ClientConnectionManager; 
import org.apache.http.conn.params.ConnRoutePNames; 
import org.apache.http.conn.scheme.PlainSocketFactory; 
import org.apache.http.conn.scheme.Scheme; 
import org.apache.http.conn.scheme.SchemeRegistry; 
import org.apache.http.conn.ssl.SSLSocketFactory; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; 
import org.apache.http.params.BasicHttpParams; 
import org.apache.http.params.HttpParams; 
import org.apache.http.params.HttpProtocolParams; 
import org.apache.http.util.EntityUtils; 
 
/**
 * How to send a request via proxy using {@link HttpClient}. 
 * 
 * @since 4.0 
 */
 
public class ClientExecuteProxy { 
 
    public static void main(String[] args)throws Exception { 
 
        // make sure to use a proxy that supports CONNECT 
        HttpHost target = new HttpHost("issues.apache.org"443"https"); 
        HttpHost proxy = new HttpHost("127.0.0.1"8080"http"); 
 
        // general setup 
        SchemeRegistry supportedSchemes = new SchemeRegistry(); 
 
        // Register the "http" and "https" protocol schemes, they are 
        // required by the default operator to look up socket factories. 
        supportedSchemes.register(new Scheme("http",  
                PlainSocketFactory.getSocketFactory(), 80)); 
        supportedSchemes.register(new Scheme("https",  
                SSLSocketFactory.getSocketFactory(), 443)); 
 
        // prepare parameters 
        HttpParams params = new BasicHttpParams(); 
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
        HttpProtocolParams.setContentCharset(params, "UTF-8"); 
        HttpProtocolParams.setUseExpectContinue(params, true); 
 
        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params,  
                supportedSchemes); 
 
        DefaultHttpClient httpclient = new DefaultHttpClient(ccm, params); 
 
        httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); 
 
        HttpGet req = new HttpGet("/"); 
 
        System.out.println("executing request to " + target + " via " + proxy); 
        HttpResponse rsp = httpclient.execute(target, req); 
        HttpEntity entity = rsp.getEntity(); 
 
        System.out.println("----------------------------------------"); 
        System.out.println(rsp.getStatusLine()); 
        Header[] headers = rsp.getAllHeaders(); 
        for (int i = 0; i<headers.length; i++) { 
            System.out.println(headers[i]); 
        } 
        System.out.println("----------------------------------------"); 
 
        if (entity != null) { 
            System.out.println(EntityUtils.toString(entity)); 
        } 
 
        // When HttpClient instance is no longer needed,  
        // shut down the connection manager to ensure 
        // immediate deallocation of all system resources 
        httpclient.getConnectionManager().shutdown();         
    } 
 
}