Created
February 13, 2011 04:10
-
-
Save luixal/824429 to your computer and use it in GitHub Desktop.
Calling WebServices through HttpClient:
A RestClient class for calling webservice using both, get and post methods, and getting the response dropped into an String.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class RestClient { | |
private ArrayList<NameValuePair> params; | |
private ArrayList<NameValuePair> headers; | |
private String url; | |
private int responseCode; | |
private String message; | |
private String response; | |
public String getResponse() { | |
return response; | |
} | |
public String getErrorMessage() { | |
return message; | |
} | |
public int getResponseCode() { | |
return responseCode; | |
} | |
public RestClient(String url) | |
{ | |
this.url = url; | |
params = new ArrayList<NameValuePair>(); | |
headers = new ArrayList<NameValuePair>(); | |
} | |
public void AddParam(String name, String value) | |
{ | |
params.add(new BasicNameValuePair(name, value)); | |
} | |
public void AddHeader(String name, String value) | |
{ | |
headers.add(new BasicNameValuePair(name, value)); | |
} | |
public void Execute(RequestMethod method) throws Exception | |
{ | |
switch(method) { | |
case GET: | |
{ | |
//add parameters | |
String combinedParams = ""; | |
if(!params.isEmpty()){ | |
combinedParams += "?"; | |
for(NameValuePair p : params) | |
{ | |
String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),”UTF-8″); | |
if(combinedParams.length() > 1) | |
{ | |
combinedParams += "&" + paramString; | |
} | |
else | |
{ | |
combinedParams += paramString; | |
} | |
} | |
} | |
HttpGet request = new HttpGet(url + combinedParams); | |
//add headers | |
for(NameValuePair h : headers) | |
{ | |
request.addHeader(h.getName(), h.getValue()); | |
} | |
executeRequest(request, url); | |
break; | |
} | |
case POST: | |
{ | |
HttpPost request = new HttpPost(url); | |
//add headers | |
for(NameValuePair h : headers) | |
{ | |
request.addHeader(h.getName(), h.getValue()); | |
} | |
if(!params.isEmpty()){ | |
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); | |
} | |
executeRequest(request, url); | |
break; | |
} | |
} | |
} | |
private void executeRequest(HttpUriRequest request, String url) | |
{ | |
HttpClient client = new DefaultHttpClient(); | |
HttpResponse httpResponse; | |
try { | |
httpResponse = client.execute(request); | |
responseCode = httpResponse.getStatusLine().getStatusCode(); | |
message = httpResponse.getStatusLine().getReasonPhrase(); | |
HttpEntity entity = httpResponse.getEntity(); | |
if (entity != null) { | |
InputStream instream = entity.getContent(); | |
response = convertStreamToString(instream); | |
// Closing the input stream will trigger connection release | |
instream.close(); | |
} | |
} catch (ClientProtocolException e) { | |
client.getConnectionManager().shutdown(); | |
e.printStackTrace(); | |
} catch (IOException e) { | |
client.getConnectionManager().shutdown(); | |
e.printStackTrace(); | |
} | |
} | |
private static String convertStreamToString(InputStream is) { | |
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); | |
StringBuilder sb = new StringBuilder(); | |
String line = null; | |
try { | |
while ((line = reader.readLine()) != null) { | |
sb.append(line + "\n"); | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} finally { | |
try { | |
is.close(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
return sb.toString(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Here is an example of how I use the class to call the Google Analytics API. I use the AddParam methods to add query string | |
post values and the AddHeader method to add headers to the request. RequestMethod is a simple enum with GET and POST values. | |
*/ | |
RestClient client = new RestClient(LOGIN_URL); | |
client.AddParam("accountType", "GOOGLE"); | |
client.AddParam("source", "tboda-widgalytics-0.1"); | |
client.AddParam("Email", _username); | |
client.AddParam("Passwd", _password); | |
client.AddParam("service", "analytics"); | |
client.AddHeader("GData-Version", "2"); | |
try { | |
client.Execute(RequestMethod.POST); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
String response = client.getResponse(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment