X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2FHttpClientUtils.java;h=2cc3d8ddb4710b82720c15de445e16c20edd976c;hb=6e5cc965552fadac700baa9b076777697f66386a;hp=d018eab2e8dcd03784e569a9e54c5f6555adcfef;hpb=23a5ed32b702d4d3682b8cdc8fd8e3f238202f7d;p=jalview.git diff --git a/src/jalview/ws/HttpClientUtils.java b/src/jalview/ws/HttpClientUtils.java index d018eab..2cc3d8d 100644 --- a/src/jalview/ws/HttpClientUtils.java +++ b/src/jalview/ws/HttpClientUtils.java @@ -1,23 +1,56 @@ +/* + * 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. + * + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.ws; import java.io.BufferedReader; +import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; 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.HttpPost; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntity; +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 { @@ -33,11 +66,57 @@ 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 + { + // 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); + HttpResponse response = httpclient.execute(httppost); + HttpEntity resEntity = response.getEntity(); + + if (resEntity != null) + { + BufferedReader r = new BufferedReader(new InputStreamReader( + resEntity.getContent())); + return r; + } + else + { + return null; + } + } + + public static BufferedReader doHttpMpartFilePost(String postUrl, + 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) + { + mpe.addPart(nvp.getName(), new StringBody(nvp.getValue())); + } + + 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); HttpResponse response = httpclient.execute(httppost); @@ -55,4 +134,36 @@ public class HttpClientUtils } } + public static BufferedReader doHttpMpartInputstreamPost(String postUrl, + 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) + { + mpe.addPart(nvp.getName(), new StringBody(nvp.getValue())); + } + + 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); + HttpResponse response = httpclient.execute(httppost); + HttpEntity resEntity = response.getEntity(); + + if (resEntity != null) + { + BufferedReader r = new BufferedReader(new InputStreamReader( + resEntity.getContent())); + return r; + } + else + { + return null; + } + } }