1 package org.opendaylight.controller.commons.httpclient;
\r
3 import java.util.ArrayList;
\r
4 import java.util.HashMap;
\r
5 import java.util.Iterator;
\r
6 import java.util.List;
\r
8 import org.apache.http.Header;
\r
9 import org.apache.http.HeaderIterator;
\r
10 import org.apache.http.HttpEntity;
\r
11 import org.apache.http.client.ClientProtocolException;
\r
12 import org.apache.http.client.config.RequestConfig;
\r
13 import org.apache.http.client.methods.CloseableHttpResponse;
\r
14 import org.apache.http.client.methods.HttpDelete;
\r
15 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
\r
16 import org.apache.http.client.methods.HttpGet;
\r
17 import org.apache.http.client.methods.HttpPost;
\r
18 import org.apache.http.client.methods.HttpPut;
\r
19 import org.apache.http.client.methods.HttpRequestBase;
\r
20 import org.apache.http.entity.StringEntity;
\r
21 import org.apache.http.impl.client.CloseableHttpClient;
\r
22 import org.apache.http.impl.client.HttpClients;
\r
23 import org.apache.http.util.EntityUtils;
\r
25 public class HTTPClient {
\r
26 static public HTTPResponse sendRequest(HTTPRequest request) throws Exception {
\r
28 CloseableHttpClient httpclient = HttpClients.createDefault();
\r
29 if (httpclient == null)
\r
30 throw new ClientProtocolException("Couldn't create an HTTP client");
\r
31 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(request.getTimeout())
\r
32 .setConnectTimeout(request.getTimeout()).build();
\r
33 HttpRequestBase httprequest;
\r
34 String method = request.getMethod();
\r
36 if (method.equalsIgnoreCase("GET")) {
\r
37 httprequest = new HttpGet(request.getUri());
\r
38 } else if (method.equalsIgnoreCase("POST")) {
\r
39 httprequest = new HttpPost(request.getUri());
\r
40 if (request.getEntity() != null) {
\r
41 StringEntity sentEntity = new StringEntity(request.getEntity());
\r
42 sentEntity.setContentType(request.getContentType());
\r
43 ((HttpEntityEnclosingRequestBase) httprequest).setEntity(sentEntity);
\r
45 } else if (method.equalsIgnoreCase("PUT")) {
\r
46 httprequest = new HttpPut(request.getUri());
\r
47 if (request.getEntity() != null) {
\r
48 StringEntity sentEntity = new StringEntity(request.getEntity());
\r
49 sentEntity.setContentType(request.getContentType());
\r
50 ((HttpEntityEnclosingRequestBase) httprequest).setEntity(sentEntity);
\r
52 } else if (method.equalsIgnoreCase("DELETE")) {
\r
53 httprequest = new HttpDelete(request.getUri());
\r
56 throw new IllegalArgumentException("This profile class only supports GET, POST, PUT, and DELETE methods");
\r
58 httprequest.setConfig(requestConfig);
\r
60 // add request headers
\r
61 Iterator<String> headerIterator = request.getHeaders().keySet().iterator();
\r
62 while (headerIterator.hasNext()) {
\r
63 String header = headerIterator.next();
\r
64 Iterator<String> valueIterator = request.getHeaders().get(header).iterator();
\r
65 while (valueIterator.hasNext()) {
\r
66 httprequest.addHeader(header, valueIterator.next());
\r
70 CloseableHttpResponse response = httpclient.execute(httprequest);
\r
72 HttpEntity receivedEntity = response.getEntity();
\r
73 int httpResponseCode = response.getStatusLine().getStatusCode();
\r
74 HTTPResponse ans = new HTTPResponse();
\r
75 HashMap<String, List<String>> headerMap = new HashMap<String, List<String>>();
\r
77 // copy response headers
\r
78 HeaderIterator it = response.headerIterator();
\r
79 while (it.hasNext()) {
\r
80 Header h = it.nextHeader();
\r
81 String name = h.getName();
\r
82 String value = h.getValue();
\r
83 if (headerMap.containsKey(name))
\r
84 headerMap.get(name).add(value);
\r
86 List<String> list = new ArrayList<String>();
\r
88 headerMap.put(name, list);
\r
91 ans.setHeaders(headerMap);
\r
93 if (httpResponseCode > 299) {
\r
94 ans.setStatus(httpResponseCode);
\r
95 ans.setEntity(response.getStatusLine().getReasonPhrase());
\r
98 ans.setStatus(response.getStatusLine().getStatusCode());
\r
99 if (receivedEntity != null)
\r
100 ans.setEntity(EntityUtils.toString(receivedEntity));
\r
102 ans.setEntity(null);
\r