package org.smartly.commons.network; import org.smartly.IConstants; import org.smartly.commons.lang.CharEncoding; import org.smartly.commons.util.ByteUtils; import org.smartly.commons.util.ClassLoaderUtils; import org.smartly.commons.util.FormatUtils; import org.smartly.commons.util.StringEscapeUtils; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.Proxy; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import java.util.Map; /** * URL shortcut methods. */ public class URLUtils { private static final String CHARSET = CharEncoding.getDefault(); public static final String TYPE_ALL = IConstants.TYPE_ALL; public static final String TYPE_JSON = IConstants.TYPE_JSON; public static final String TYPE_TEXT = IConstants.TYPE_TEXT; public static final String TYPE_HTML = IConstants.TYPE_HTML; private URLUtils() { } public static String getUrlContent(final String uri) { return getUrlContent(uri, 3000); } public static String getUrlContent(final String uri, final String contentType) { return getUrlContent(uri, 3000, contentType); } public static String getUrlContent(final String uri, final int timeout) { return getUrlContent(uri, timeout, TYPE_HTML); } public static String getUrlContent(final String uri, final int timeout, final String contentType) { try { final InputStream is = getInputStream(uri, timeout, contentType); try { final byte[] bytes = ByteUtils.getBytes(is); return new String(bytes, CHARSET); } finally { is.close(); } } catch (IOException t) { // file not found or connection timeout final String resource; if (TYPE_HTML.equalsIgnoreCase(contentType)) { resource = "error.html"; } else if (TYPE_JSON.equalsIgnoreCase(contentType)) { resource = "error.json"; } else { resource = "error.txt"; } final String text = ClassLoaderUtils.getResourceAsString(null, URLUtils.class, resource, CHARSET); final Map<String, String> args = new HashMap<String, String>(); args.put("uri", StringEscapeUtils.escapeJavaScript(uri)); args.put("error", StringEscapeUtils.escapeJavaScript(t.toString())); return FormatUtils.formatTemplate(text, "{{", "}}", args); } } public static InputStream getInputStream(final String uri) throws IOException { return getInputStream(uri, 3000); } public static InputStream getInputStream(final String uri, final String contentType) throws IOException { final URL url = new URL(uri.trim().replaceAll(" ", "+")); return getInputStream(url, 3000, contentType); } public static InputStream getInputStream(final String uri, final int timeout) throws IOException { final URL url = new URL(uri.trim().replaceAll(" ", "+")); return getInputStream(url, timeout, TYPE_HTML); } public static InputStream getInputStream(final String uri, final int timeout, final String contentType) throws IOException { final URL url = new URL(uri.trim().replaceAll(" ", "+")); return getInputStream(url, timeout, contentType); } public static InputStream getInputStream(final URL url, final int timeout, final String type) throws IOException { final Proxy proxy = NetworkUtils.getProxy(); final URLConnection conn = url.openConnection(proxy); if (conn instanceof HttpURLConnection) { ((HttpURLConnection) conn).setRequestMethod("GET"); } conn.setConnectTimeout(timeout); conn.addRequestProperty("Accept", type); conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20100101 Firefox/23.0"); conn.addRequestProperty("Connection", "keep-alive"); conn.connect(); return conn.getInputStream(); } // ------------------------------------------------------------------------ // p r i v a t e // ------------------------------------------------------------------------ }