com.hfg.util.io.HTTPUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com_hfg Show documentation
Show all versions of com_hfg Show documentation
com.hfg xml, html, svg, and bioinformatics utility library
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);
}
}