2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.net.HttpURLConnection;
26 import java.net.ProtocolException;
29 import javax.ws.rs.HttpMethod;
31 import jalview.bin.Cache;
33 public class HttpUtils
37 * Returns true if it is possible to open an input stream at the given URL,
38 * else false. The input stream is closed.
43 public static boolean isValidUrl(String url)
45 InputStream is = null;
48 is = HttpUtils.openStream(new URL(url));
53 } catch (IOException x)
55 // MalformedURLException, FileNotFoundException
64 } catch (IOException e)
73 public static boolean startsWithHttpOrHttps(String file)
75 return file.startsWith("http://") || file.startsWith("https://");
79 * wrapper to get/post to a URL or check headers
86 * @throws ProtocolException
88 public static boolean checkUrlAvailable(URL url, int readTimeout)
89 throws IOException, ProtocolException
91 // jalview.bin.Console.outPrintln(System.currentTimeMillis() + " " + url);
93 HttpURLConnection connection = (HttpURLConnection) url.openConnection();
94 connection.setRequestMethod(HttpMethod.HEAD);
95 connection.setDoInput(true);
96 connection.setUseCaches(false);
97 connection.setConnectTimeout(300);
98 connection.setReadTimeout(readTimeout);
100 // HttpURLConnection doesn't follow redirects from http to https. It should!
101 HttpURLConnection conn = followConnection(connection);
102 return conn.getResponseCode() == 200;
106 * wrapper to follow a URL connection ALLOWING redirects from http to https
108 * @param HttpURLConnection
110 * @return HttpUrlConnection conn
112 public static HttpURLConnection followConnection(HttpURLConnection conn0)
115 URL url = conn0.getURL();
120 HttpURLConnection conn = null;
121 int response = conn0.getResponseCode();
122 boolean followed = false;
123 if (response >= 300 && response < 400 && conn0.getFollowRedirects())
125 // we are only checking for a redirect from http to https
126 if ("http".equals(url.getProtocol()))
128 URL loc = new URL(conn0.getHeaderField("Location"));
129 if (loc != null && "https".equals(loc.getProtocol()))
131 conn = (HttpURLConnection) loc.openConnection();
132 conn.setRequestMethod(conn0.getRequestMethod());
133 conn.setDoInput(conn0.getDoInput());
134 conn.setUseCaches(conn0.getUseCaches());
135 conn.setConnectTimeout(conn0.getConnectTimeout());
136 conn.setReadTimeout(conn0.getReadTimeout());
137 conn.setInstanceFollowRedirects(
138 conn0.getInstanceFollowRedirects());
143 return followed && conn != null ? conn : conn0;
147 * wrapper to follow a URL connection ALLOWING redirects from http to https
151 * @return HttpUrlConnection conn
153 public static HttpURLConnection openConnection(URL url) throws IOException
159 HttpURLConnection conn = null;
160 String protocol = url.getProtocol();
161 if ("http".equals(protocol) || "https".equals(protocol))
163 HttpURLConnection conn0 = (HttpURLConnection) url.openConnection();
166 conn = HttpUtils.followConnection(conn0);
177 * wrapper to follow a URL connection ALLOWING redirects from http to https
178 * and return the followed InputStream
182 * @return HttpUrlConnection conn
184 public static InputStream openStream(URL url) throws IOException
190 InputStream is = null;
191 String protocol = url.getProtocol();
192 if ("http".equals(protocol) || "https".equals(protocol))
194 HttpURLConnection conn = HttpUtils
195 .followConnection((HttpURLConnection) url.openConnection());
198 is = conn.getInputStream();
203 is = url.openStream();
208 public static String getUserAgent()
210 return getUserAgent(null);
213 public static String getUserAgent(String className)
215 StringBuilder sb = new StringBuilder();
216 sb.append("Jalview");
218 sb.append(Cache.getDefault("VERSION", "Unknown"));
220 sb.append(System.getProperty("os.name"));
222 sb.append(System.getProperty("os.arch"));
224 sb.append(System.getProperty("os.name"));
226 sb.append(System.getProperty("os.version"));
229 sb.append(System.getProperty("java.version"));
231 sb.append("jalview/");
232 sb.append(ChannelProperties.getProperty("channel"));
233 if (className != null)
236 sb.append(className);
238 String installation = Cache.applicationProperties
239 .getProperty("INSTALLATION");
240 if (installation != null)
243 sb.append(installation);
246 sb.append(" help@jalview.org");
247 return sb.toString();