Package org.pentaho.platform.util.web

Source Code of org.pentaho.platform.util.web.HttpUtil

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.platform.util.web;

import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpConnectionManager;
import org.apache.commons.httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
import org.apache.commons.lang.StringUtils;
import org.pentaho.platform.util.logging.Logger;
import org.pentaho.platform.util.messages.Messages;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class HttpUtil {

  public static HttpClient getClient() {

    int connectionTimeout = 3000;
    int pageTimeout = 7000;
    HttpConnectionManager connectionManager = new SimpleHttpConnectionManager();
    HttpConnectionManagerParams connectionParams = connectionManager.getParams();
    connectionParams.setConnectionTimeout( connectionTimeout );
    connectionParams.setSoTimeout( pageTimeout );

    HttpClient httpClient = null;
    if ( connectionManager != null ) {
      httpClient = new HttpClient( connectionManager );
    }
    return httpClient;

  }

  public static boolean getURLContent( final String url, final StringBuffer content ) throws MalformedURLException,
    IOException {

    HttpClient httpClient = HttpUtil.getClient();

    try {
      HostConfiguration hostConfig = null;
      if ( StringUtils.isNotEmpty( System.getProperty( "http.proxyHost" ) ) ) {
        hostConfig = new HostConfiguration() {
          @Override
          public synchronized String getProxyHost() {
            return System.getProperty( "http.proxyHost" );
          }

          @Override
          public synchronized int getProxyPort() {
            return Integer.parseInt( System.getProperty( "http.proxyPort" ) );
          }
        };
        httpClient.setHostConfiguration( hostConfig );
        if ( System.getProperty( "http.proxyUser" ) != null
          && System.getProperty( "http.proxyUser" ).trim().length() > 0 ) {
          httpClient.getState().setProxyCredentials(
            new AuthScope( System.getProperty( "http.proxyHost" ),
              Integer.parseInt( System.getProperty( "http.proxyPort" ) ) ),
            new UsernamePasswordCredentials( System.getProperty( "http.proxyUser" ),
              System.getProperty( "http.proxyPassword" ) )
          );
        }
      }


      GetMethod call = new GetMethod( url );

      int status = httpClient.executeMethod( hostConfig, call );
      if ( status == 200 ) {
        InputStream response = call.getResponseBodyAsStream();
        try {
          byte[] buffer = new byte[ 2048 ];
          int size = response.read( buffer );
          while ( size > 0 ) {
            for ( int idx = 0; idx < size; idx++ ) {
              content.append( (char) buffer[ idx ] );
            }
            size = response.read( buffer );
          }
        } catch ( Exception e ) {
          // we can ignore this because the content comparison will fail
        }
      }
    } catch ( Throwable e ) {
      StringWriter writer = new StringWriter();
      PrintWriter writer2 = new PrintWriter( writer );
      e.printStackTrace( writer2 );
      content.append( writer.getBuffer() );
      return false;
    }
    return true;

  }

  public static void getURLContent_old( final String uri, final StringBuffer content ) throws MalformedURLException,
    IOException {

    URL url = new URL( uri );
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.connect();
    InputStream in = connection.getInputStream();
    byte[] buffer = new byte[ 300 ];
    int n = buffer.length;
    while ( n > 0 ) {
      n = in.read( buffer );
      for ( int i = 0; i < n; i++ ) {
        content.append( (char) buffer[ i ] );
      }
    }
    n = in.read( buffer );
  }

  public static String getURLContent( final String uri ) {

    try {
      StringBuffer content = new StringBuffer();
      HttpUtil.getURLContent( uri, content );
      return content.toString();
    } catch ( Exception e ) {
      // TODO: handle this error
      Logger
        .error(
          "org.pentaho.platform.util.web.HttpUtil",
          Messages.getInstance().getErrorString( "HttpUtil.ERROR_0001_URL_ERROR", e.getMessage() ),
          e ); //$NON-NLS-1$ //$NON-NLS-2$
      return null;
    }
  }

  public static InputStream getURLInputStream( final String uri ) {

    try {
      URL url = new URL( uri );
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      connection.connect();
      InputStream in = connection.getInputStream();
      return in;
    } catch ( Exception e ) {
      // TODO: handle this error
      Logger
        .error(
          "org.pentaho.platform.util.web.HttpUtil",
          Messages.getInstance().getErrorString( "HttpUtil.ERROR_0001_URL_ERROR", e.getMessage() ),
          e ); //$NON-NLS-1$ //$NON-NLS-2$
      return null;
    }

  }

  public static Reader getURLReader( final String uri ) {

    try {
      URL url = new URL( uri );
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      connection.connect();
      InputStream in = connection.getInputStream();
      return new InputStreamReader( in );
    } catch ( Exception e ) {
      // TODO: handle this error
      Logger.error( HttpUtil.class.getName(), Messages.getInstance().getErrorString(
        "HttpUtil.ERROR_0001_URL_ERROR", e.getMessage() ), e ); //$NON-NLS-1$
      return null;
    }

  }

  //
  // The code in the next two methods is based on the code in HttpUtils.java
  // from
  // javax.servlet.http. HttpUtils is deprecated - so I updated the methods to
  // be a bit smarter
  // and use Map instead of Hashtable
  //
  public static Map parseQueryString( final String s ) {
    String[] valArray = null;
    if ( s == null ) {
      throw new IllegalArgumentException();
    }
    Map<String, String[]> rtn = new HashMap<String, String[]>();
    StringBuffer sb = new StringBuffer();
    String key;
    for ( StringTokenizer st = new StringTokenizer( s, "&" ); st.hasMoreTokens();
          rtn.put( key, valArray ) ) { //$NON-NLS-1$
      String pair = st.nextToken();
      int pos = pair.indexOf( '=' );
      if ( pos == -1 ) {
        throw new IllegalArgumentException();
      }
      key = HttpUtil.parseName( pair.substring( 0, pos ), sb );
      String val = HttpUtil.parseName( pair.substring( pos + 1, pair.length() ), sb );
      if ( rtn.containsKey( key ) ) {
        String[] oldVals = rtn.get( key );
        valArray = new String[ oldVals.length + 1 ];
        System.arraycopy( oldVals, 0, valArray, 0, oldVals.length );
        valArray[ oldVals.length ] = val;
      } else {
        valArray = new String[ 1 ];
        valArray[ 0 ] = val;
      }
    }
    return rtn;
  }

  private static String parseName( final String s, final StringBuffer sb ) {
    sb.setLength( 0 );
    char c;
    for ( int i = 0; i < s.length(); i++ ) {
      c = s.charAt( i );
      switch( c ) {
        case 43: { // '+'
          sb.append( ' ' );
          break;
        }
        case 37: { // '%'
          try {
            sb.append( (char) Integer.parseInt( s.substring( i + 1, i + 3 ), 16 ) );
            i += 2;
            break;
          } catch ( NumberFormatException numberformatexception ) {
            throw new IllegalArgumentException();
          } catch ( StringIndexOutOfBoundsException oob ) {
            String rest = s.substring( i );
            sb.append( rest );
            if ( rest.length() == 2 ) {
              i++;
            }
          }
          break;
        }
        default: {
          sb.append( c );
          break;
        }
      }
    }
    return sb.toString();
  }

}
TOP

Related Classes of org.pentaho.platform.util.web.HttpUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.