2 * Copyright IBM Corporation, 2013. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.commons.httpclient;
\r
10 import java.util.ArrayList;
\r
11 import java.util.HashMap;
\r
12 import java.util.Iterator;
\r
13 import java.util.List;
\r
15 import org.apache.http.Header;
\r
16 import org.apache.http.HeaderIterator;
\r
17 import org.apache.http.HttpEntity;
\r
18 import org.apache.http.client.ClientProtocolException;
\r
19 import org.apache.http.client.config.RequestConfig;
\r
20 import org.apache.http.client.methods.CloseableHttpResponse;
\r
21 import org.apache.http.client.methods.HttpDelete;
\r
22 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
\r
23 import org.apache.http.client.methods.HttpGet;
\r
24 import org.apache.http.client.methods.HttpPost;
\r
25 import org.apache.http.client.methods.HttpPut;
\r
26 import org.apache.http.client.methods.HttpRequestBase;
\r
27 import org.apache.http.entity.StringEntity;
\r
28 import org.apache.http.impl.client.CloseableHttpClient;
\r
29 import org.apache.http.impl.client.HttpClients;
\r
30 import org.apache.http.util.EntityUtils;
\r
32 public class HTTPClient {
\r
33 static public HTTPResponse sendRequest(HTTPRequest request) throws Exception {
\r
35 CloseableHttpClient httpclient = HttpClients.createDefault();
\r
36 if (httpclient == null)
\r
37 throw new ClientProtocolException("Couldn't create an HTTP client");
\r
38 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(request.getTimeout())
\r
39 .setConnectTimeout(request.getTimeout()).build();
\r
40 HttpRequestBase httprequest;
\r
41 String method = request.getMethod();
\r
43 if (method.equalsIgnoreCase("GET")) {
\r
44 httprequest = new HttpGet(request.getUri());
\r
45 } else if (method.equalsIgnoreCase("POST")) {
\r
46 httprequest = new HttpPost(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("PUT")) {
\r
53 httprequest = new HttpPut(request.getUri());
\r
54 if (request.getEntity() != null) {
\r
55 StringEntity sentEntity = new StringEntity(request.getEntity());
\r
56 sentEntity.setContentType(request.getContentType());
\r
57 ((HttpEntityEnclosingRequestBase) httprequest).setEntity(sentEntity);
\r
59 } else if (method.equalsIgnoreCase("DELETE")) {
\r
60 httprequest = new HttpDelete(request.getUri());
\r
63 throw new IllegalArgumentException("This profile class only supports GET, POST, PUT, and DELETE methods");
\r
65 httprequest.setConfig(requestConfig);
\r
67 // add request headers
\r
68 Iterator<String> headerIterator = request.getHeaders().keySet().iterator();
\r
69 while (headerIterator.hasNext()) {
\r
70 String header = headerIterator.next();
\r
71 Iterator<String> valueIterator = request.getHeaders().get(header).iterator();
\r
72 while (valueIterator.hasNext()) {
\r
73 httprequest.addHeader(header, valueIterator.next());
\r
77 CloseableHttpResponse response = httpclient.execute(httprequest);
\r
79 HttpEntity receivedEntity = response.getEntity();
\r
80 int httpResponseCode = response.getStatusLine().getStatusCode();
\r
81 HTTPResponse ans = new HTTPResponse();
\r
82 HashMap<String, List<String>> headerMap = new HashMap<String, List<String>>();
\r
84 // copy response headers
\r
85 HeaderIterator it = response.headerIterator();
\r
86 while (it.hasNext()) {
\r
87 Header h = it.nextHeader();
\r
88 String name = h.getName();
\r
89 String value = h.getValue();
\r
90 if (headerMap.containsKey(name))
\r
91 headerMap.get(name).add(value);
\r
93 List<String> list = new ArrayList<String>();
\r
95 headerMap.put(name, list);
\r
98 ans.setHeaders(headerMap);
\r
100 if (httpResponseCode > 299) {
\r
101 ans.setStatus(httpResponseCode);
\r
102 ans.setEntity(response.getStatusLine().getReasonPhrase());
\r
105 ans.setStatus(response.getStatusLine().getStatusCode());
\r
106 if (receivedEntity != null)
\r
107 ans.setEntity(EntityUtils.toString(receivedEntity));
\r
109 ans.setEntity(null);
\r