org.biojava.nbio.structure.align.util.URLConnectionTools Maven / Gradle / Ivy
Show all versions of biojava-structure Show documentation
/*
* This file is originally coming from the Dasobert library.
* Author: Andreas Prlic
*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
* Created on Jul 25, 2006
*
*/
package org.biojava.nbio.structure.align.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.zip.GZIPInputStream;
/**
* A class that takes care about opening URLConnections and sets the proper timeouts
* @author Andreas Prlic
* @author Anthony Bradley
* @since 5.0
*/
public class URLConnectionTools {
/** The default connection timeout in ms - 15 seconds*/
public static final int DEFAULT_CONNECTION_TIMEOUT = 30000;
/**
* Open HttpURLConnection. Recommended way to open URL connections in Java 1.7 and 1.8.
* https://eventuallyconsistent.net/2011/08/02/working-with-urlconnection-and-timeouts/
* @param url URL to open
* @param timeout timeout in milli seconds
* @throws IOException an error in opening the URL
*/
public static URLConnection openURLConnection(URL url, int timeout) throws IOException {
URLConnection huc = url.openConnection();
huc.setReadTimeout(timeout);
huc.setConnectTimeout(timeout);
return huc;
}
/**
* Open HttpURLConnection. Recommended way to open
* HttpURLConnections, since this take care of setting timeouts
* properly for java 1.4 and 1.5
* uses the DEFAULT_CONNECTION_TIMEOUT (= 15 seconds)
* @param url a URL to open a http connection to
* @return HttpURLConnect the opened connection
* @throws IOException an error in opening the URL
*
*/
public static URLConnection openURLConnection(URL url) throws IOException {
return openURLConnection(url,DEFAULT_CONNECTION_TIMEOUT);
}
/**
* Connect to server and return result as an InputStream.
* always asks for response to be in GZIP encoded
*
* The caller is responsible to close the returned InputStream not to cause
* resource leaks.
* @param url the URL to connect to
* @param timeout the timeout for the connection
* @return an {@link InputStream} of response
* @throws IOException due to an error opening the URL
*
*/
public static InputStream getInputStream(URL url, int timeout) throws IOException
{
return getInputStream(url,true, timeout);
}
/**
* Connect to a URL and return result as an InputStream.
* always asks for response to be in GZIP encoded
*
* The caller is responsible to close the returned InputStream not to cause
* resource leaks.
* @param url the input URL to be read
* @return an {@link InputStream} of response
* @throws IOException due to an error opening the URL
*/
public static InputStream getInputStream(URL url) throws IOException
{
return getInputStream(url,true, DEFAULT_CONNECTION_TIMEOUT);
}
/**
* Open a URL and return an InputStream to it
* if acceptGzipEncoding == true, use GZIPEncoding to
* compress communication.
*
* The caller is responsible to close the returned InputStream not to cause
* resource leaks.
* @param url the input URL to be read
* @param acceptGzipEncoding whether to accept Gzip encoding
* @param timeout
* @return an {@link InputStream} of response
* @throws IOException due to an error opening the URL
*/
public static InputStream getInputStream(URL url, boolean acceptGzipEncoding, int timeout) throws IOException {
InputStream inStream = null ;
URLConnection huc = URLConnectionTools.openURLConnection(url,timeout);
if ( acceptGzipEncoding) huc.setRequestProperty("Accept-Encoding", "gzip");
String contentEncoding = huc.getContentEncoding();
inStream = huc.getInputStream();
if (contentEncoding != null) {
if (contentEncoding.contains("gzip")) {
inStream = new GZIPInputStream(inStream);
}
}
return inStream;
}
/**
* Do a POST to a URL and return the response stream for further processing elsewhere.
*
* The caller is responsible to close the returned InputStream not to cause
* resource leaks.
* @param url the input URL to be read
* @param data the post data
* @return an {@link InputStream} of response
* @throws IOException due to an error opening the URL
*/
public static InputStream doPOST(URL url, String data) throws IOException
{
return doPOST(url,data,DEFAULT_CONNECTION_TIMEOUT);
}
/**
* Do a POST to a URL and return the response stream for further processing elsewhere.
*
* The caller is responsible to close the returned InputStream not to cause
* resource leaks.
* @param url the input URL to be read
* @param data the post data
* @param timeout
* @return an {@link InputStream} of response
* @throws IOException due to an error opening the URL
*/
public static InputStream doPOST(URL url, String data, int timeout) throws IOException
{
URLConnection conn = openURLConnection(url, timeout);
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
return conn.getInputStream();
}
}