/* * $Id$ * * Copyright (c) 2000-2007 by Rodney Kinney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.chat; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Properties; import VASSAL.tools.io.IOUtils; /** * Performs Get and Post operations to a given URL */ public class HttpRequestWrapper { private String baseURL; public HttpRequestWrapper(String baseURL) { this.baseURL = baseURL; } public List<String> doGet(Properties p) throws IOException { return doGet("", p); //$NON-NLS-1$ } private List<String> readLines(InputStream is) throws IOException { BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(is, "UTF-8")); //$NON-NLS-1$ final ArrayList<String> l = new ArrayList<String>(); String line; while ((line = in.readLine()) != null) l.add(line); return l; } finally { IOUtils.closeQuietly(in); } } /** * Perform a GET request * @param url the URL relative to the base URL * @param props additional query parameters * @return a List of Strings, one for each line in the response * @throws IOException */ public List<String> doGet(String url, Properties props) throws IOException { url = baseURL + url; if (props != null) { url += "?"; //$NON-NLS-1$ for (Enumeration<?> e = props.keys(); e.hasMoreElements();) { String key = (String) e.nextElement(); String value = props.getProperty(key); url += key + "=" + URLEncoder.encode(value,"UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$ if (e.hasMoreElements()) { url += "&"; //$NON-NLS-1$ } } } final URLConnection conn = new URL(url).openConnection(); conn.setUseCaches(false); return readLines(conn.getInputStream()); } public List<String> doPost(Properties p) throws IOException { return doPost("",p); //$NON-NLS-1$ } public List<String> doPost(String url, Properties props) throws IOException { url = baseURL + url; String content = ""; //$NON-NLS-1$ if (props != null) { for (Enumeration<?> e = props.keys(); e.hasMoreElements();) { String key = (String) e.nextElement(); String value = props.getProperty(key); content += key + "=" + URLEncoder.encode(value,"UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$ if (e.hasMoreElements()) { content += "&"; //$NON-NLS-1$ } } } final URLConnection conn = new URL(url).openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); // conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); DataOutputStream out = null; try { out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(content); } finally { IOUtils.closeQuietly(out); } return readLines(conn.getInputStream()); } }