All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hfg.util.io.HTTPUtil Maven / Gradle / Ivy

There is a newer version: 20240423
Show newest version
package com.hfg.util.io;


import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLEncoder;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Collection;
import java.util.logging.Logger;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.servlet.http.Cookie;

import com.hfg.util.StringBuilderPlus;
import com.hfg.util.StringUtil;
import com.hfg.util.collection.CollectionUtil;

//------------------------------------------------------------------------------
/**
 * HTTP utility functions.
 *
 * @author J. Alex Taylor, hairyfatguy.com
 */
//------------------------------------------------------------------------------
// com.hfg XML/HTML Coding Library
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
// J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com
// [email protected]
//------------------------------------------------------------------------------
public class HTTPUtil
{
   private final static Logger LOGGER = Logger.getLogger(HTTPUtil.class.getName());

   //---------------------------------------------------------------------------
   public static HttpURLConnection openConnection(String inURL)
         throws IOException
   {
      return openConnection(inURL, null, null);
   }

   //---------------------------------------------------------------------------
   public static HttpURLConnection openConnection(String inURL, ProxyConfig inProxyConfig, Collection inCookies)
         throws IOException
   {
      URL url = new URL(inURL);

      HttpURLConnection conn;

      // Proxy settings?
      if (inProxyConfig != null)
      {
         Integer port = inProxyConfig.getPort();
         if (null == port)
         {
            if (url.getProtocol().equalsIgnoreCase("HTTP"))
            {
               port = 80;
            }
            else if (url.getProtocol().equalsIgnoreCase("HTTPS"))
            {
               port = 443;
            }
         }

         LOGGER.fine("Setting HTTP proxy host: " + inProxyConfig.getHost() + ":" + port);

         Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(inProxyConfig.getHost(), port));
         conn = (HttpURLConnection) url.openConnection(proxy);

         /* TODO
         LoginCredentials credentials = inProxyConfig.getCredentials();
         if (credentials != null)
         {
            Authenticator authenticator = new Authenticator()
            {
               public PasswordAuthentication getPasswordAuthentication()
               {
                  return (new PasswordAuthentication("user",
                                                     "password".toCharArray()));
               }
            };
            Authenticator.setDefault(authenticator);
         } */
      }
      else
      {
         conn = (HttpURLConnection) url.openConnection();
      }

      // Any cookies to attach to the request?
      if (CollectionUtil.hasValues(inCookies))
      {
         StringBuilderPlus buffer = new StringBuilderPlus().setDelimiter("; ");
         for (Cookie cookie : inCookies)
         {
            buffer.delimitedAppend(cookie.getName() + "=" + URLEncoder.encode(cookie.getValue(), "UTF-8"));
         }

         conn.setRequestProperty("Cookie", buffer.toString());
      }

      conn.connect();


      int statusCode = conn.getResponseCode();
      if (statusCode != 200)
      {
         String msg = null;
         try
         {
            msg = StreamUtil.inputStreamToString(conn.getErrorStream());
         }
         catch (Exception e)
         {

         }
         throw new IOException("Couldn't establish a connection to " + inURL + "!\nHTTP response code " + statusCode + (StringUtil.isSet(msg) ? "\n" + msg : ""));
      }

      return conn;
   }

   //---------------------------------------------------------------------------
   public static void makeHttpsTrustEveryone()
         throws Exception
   {
      X509TrustManager tooTrustingMgr = new X509TrustManager()
      {
         public X509Certificate[] getAcceptedIssuers()
         {
            return null;
         }

         public void checkClientTrusted(X509Certificate[] inCerts,
                                        String inAuthType)
         {
         }

         public void checkServerTrusted(X509Certificate[] inCerts,
                                        String inAuthType)
         {
         }
      };

      TrustManager[] trustAllCerts = new TrustManager[] { tooTrustingMgr };

      SSLContext context = SSLContext.getInstance("SSL");

      HostnameVerifier hostNameVerifier = new HostnameVerifier()
      {
         public boolean verify(String arg0, SSLSession arg1)
         {
            return true;
         }
      };

      context.init(null, trustAllCerts, new SecureRandom());

      HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());

      HttpsURLConnection.setDefaultHostnameVerifier(hostNameVerifier);
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy