package jeql.std.function; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import jeql.api.annotation.Metadata; import jeql.api.function.FunctionClass; import jeql.util.URLParamEncoder; public class NetFunction implements FunctionClass { /** * Doesn't work - encodes = signs, and maybe other things as well * @param url * @return */ private static String encodeURL(String url) { // split into base and params String[] part = url.split("[\\?\\&]"); StringBuilder buf = new StringBuilder(); for (int i = 0; i < part.length; i++) { switch (i) { case 0: buf.append(part[0]); break; case 1: buf.append("?"); buf.append(URLParamEncoder.encode(part[1])); break; default: buf.append("&"); buf.append(URLParamEncoder.encode(part[i])); break; } } return buf.toString(); } public static String encodeURLParameter(String param) { return URLParamEncoder.encode(param); } public static String readURLnoEOL(String urlStr) { return readURL(urlStr, false); } public static String readURL(String urlStr) { return readURL(urlStr, true); } @Metadata (description = "Read text data from a URL" ) public static String readURL(String urlStr, @Metadata(name = "addEOL", description = "If true append EOL to lines read" ) boolean addEOL) { return readURL(urlStr, addEOL, -1); } @Metadata (description = "Read text data from a URL" ) public static String readURL(String urlStr, @Metadata(name = "addEOL", description = "If true append EOL to lines read" ) boolean addEOL, @Metadata(name = "timeout", description = "Timeout in milliseconds" ) int timeout) { StringBuffer buf = new StringBuffer(); BufferedReader bufReader = null; try { try { URL url = new URL(urlStr); URLConnection conn = url.openConnection(); // add timeout if specified if (timeout > 0) conn.setReadTimeout(timeout); bufReader = new BufferedReader(new InputStreamReader(conn .getInputStream())); String line = ""; while ((line = bufReader.readLine()) != null) { buf.append(line); // add EOL char to each line if requested if (addEOL) buf.append('\n'); } // System.out.println(buf); } finally { if (bufReader != null) bufReader.close(); } } catch (Exception ex) { // eat any exception - just return an empty string //ex.printStackTrace(); } // may be empty string if an error occurred return buf.toString(); } /* * Alternative reading code * InputStream responseBodyStream = connection.getInputStream(); StringBuffer responseBody = new StringBuffer(); while ((read = responseBodyStream.read(buffer)) != -1) { responseBody.append(new String(buffer, 0, read)); } connection.disconnect(); */ }