X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2FHttpClientUtils.java;h=8c3dca48d24cf462912e011dc406f7b77d1034b1;hb=299d07a9554a3661d44395aa2c6bad9cecd10bf0;hp=740b669c07baf63cfd7c283febef86b856fa0a29;hpb=3b94f01f4edf56896ae3b5f0ce6cb4f1996e7bbc;p=jalview.git diff --git a/src/jalview/ws/HttpClientUtils.java b/src/jalview/ws/HttpClientUtils.java index 740b669..8c3dca4 100644 --- a/src/jalview/ws/HttpClientUtils.java +++ b/src/jalview/ws/HttpClientUtils.java @@ -1,19 +1,22 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) - * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * * Jalview 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 General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.ws; @@ -26,10 +29,12 @@ import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; +import org.apache.http.HttpVersion; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; @@ -37,11 +42,16 @@ import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.InputStreamBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.BasicHttpParams; +import org.apache.http.params.CoreProtocolPNames; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; /** * Helpful procedures for working with services via HTTPClient + * * @author jimp - * + * */ public class HttpClientUtils { @@ -57,10 +67,23 @@ public class HttpClientUtils * @throws Exception */ public static BufferedReader doHttpUrlPost(String postUrl, - List vals) throws ClientProtocolException, - IOException + List vals, int connectionTimeoutMs, + int readTimeoutMs) throws ClientProtocolException, IOException { - HttpClient httpclient = new DefaultHttpClient(); + // todo use HttpClient 4.3 or later and class RequestConfig + HttpParams params = new BasicHttpParams(); + params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, + HttpVersion.HTTP_1_1); + if (connectionTimeoutMs > 0) + { + HttpConnectionParams.setConnectionTimeout(params, + connectionTimeoutMs); + } + if (readTimeoutMs > 0) + { + HttpConnectionParams.setSoTimeout(params, readTimeoutMs); + } + HttpClient httpclient = new DefaultHttpClient(params); HttpPost httppost = new HttpPost(postUrl); UrlEncodedFormEntity ue = new UrlEncodedFormEntity(vals, "UTF-8"); httppost.setEntity(ue); @@ -69,8 +92,8 @@ public class HttpClientUtils if (resEntity != null) { - BufferedReader r = new BufferedReader(new InputStreamReader( - resEntity.getContent())); + BufferedReader r = new BufferedReader( + new InputStreamReader(resEntity.getContent())); return r; } else @@ -80,18 +103,20 @@ public class HttpClientUtils } public static BufferedReader doHttpMpartFilePost(String postUrl, - List vals, String fparm,File file, String mtype) throws ClientProtocolException, - IOException + List vals, String fparm, File file, String mtype) + throws ClientProtocolException, IOException { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(postUrl); - MultipartEntity mpe = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); - for (NameValuePair nvp:vals) + MultipartEntity mpe = new MultipartEntity( + HttpMultipartMode.BROWSER_COMPATIBLE); + for (NameValuePair nvp : vals) { mpe.addPart(nvp.getName(), new StringBody(nvp.getValue())); } - - FileBody fb = new FileBody(file, mtype!=null ? mtype : "application/octet-stream"); + + FileBody fb = new FileBody(file, + mtype != null ? mtype : "application/octet-stream"); mpe.addPart(fparm, fb); UrlEncodedFormEntity ue = new UrlEncodedFormEntity(vals, "UTF-8"); httppost.setEntity(ue); @@ -100,8 +125,8 @@ public class HttpClientUtils if (resEntity != null) { - BufferedReader r = new BufferedReader(new InputStreamReader( - resEntity.getContent())); + BufferedReader r = new BufferedReader( + new InputStreamReader(resEntity.getContent())); return r; } else @@ -109,19 +134,23 @@ public class HttpClientUtils return null; } } + public static BufferedReader doHttpMpartInputstreamPost(String postUrl, - List vals, String fparm,String fname, InputStream is, String mtype) throws ClientProtocolException, - IOException + List vals, String fparm, String fname, + InputStream is, String mtype) + throws ClientProtocolException, IOException { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(postUrl); MultipartEntity mpe = new MultipartEntity(HttpMultipartMode.STRICT); - for (NameValuePair nvp:vals) + for (NameValuePair nvp : vals) { mpe.addPart(nvp.getName(), new StringBody(nvp.getValue())); } - - InputStreamBody fb = (mtype!=null) ? new InputStreamBody(is, fname, mtype) : new InputStreamBody(is, fname); + + InputStreamBody fb = (mtype != null) + ? new InputStreamBody(is, fname, mtype) + : new InputStreamBody(is, fname); mpe.addPart(fparm, fb); UrlEncodedFormEntity ue = new UrlEncodedFormEntity(vals, "UTF-8"); httppost.setEntity(ue); @@ -130,8 +159,69 @@ public class HttpClientUtils if (resEntity != null) { - BufferedReader r = new BufferedReader(new InputStreamReader( - resEntity.getContent())); + BufferedReader r = new BufferedReader( + new InputStreamReader(resEntity.getContent())); + return r; + } + else + { + return null; + } + } + + /** + * do an HTTP GET with URL-Encoded parameters passed in the Query string + * + * @param url + * @param vals + * @return Reader containing content, if any, or null if no entity returned. + * @throws IOException + * @throws ClientProtocolException + * @throws Exception + */ + public static BufferedReader doHttpGet(String url, + List vals, int connectionTimeoutMs, + int readTimeoutMs) throws ClientProtocolException, IOException + { + // todo use HttpClient 4.3 or later and class RequestConfig + HttpParams params = new BasicHttpParams(); + params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, + HttpVersion.HTTP_1_1); + if (connectionTimeoutMs > 0) + { + HttpConnectionParams.setConnectionTimeout(params, + connectionTimeoutMs); + } + if (readTimeoutMs > 0) + { + HttpConnectionParams.setSoTimeout(params, readTimeoutMs); + } + boolean first = true; + for (NameValuePair param : vals) + { + if (first) + { + url += "?"; + } + else + { + url += "&"; + } + url += param.getName(); + url += "="; + url += param.getValue(); + } + HttpClient httpclient = new DefaultHttpClient(params); + HttpGet httpGet = new HttpGet(url); + // UrlEncodedFormEntity ue = new UrlEncodedFormEntity(vals, "UTF-8"); + // httpGet.setEntity(ue); + HttpResponse response = httpclient.execute(httpGet); + HttpEntity resEntity = response.getEntity(); + + if (resEntity != null) + { + BufferedReader r = new BufferedReader( + new InputStreamReader(resEntity.getContent())); return r; } else