-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRhapsodyHttpClient.groovy
157 lines (138 loc) · 5.35 KB
/
RhapsodyHttpClient.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.HttpMessage;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.impl.client.DefaultHttpClient;
public class RhapsodyHttpClient
{
private String CSRFToken;
private String baseURL;
private DefaultHttpClient httpclient;
private String baseAuthUsername;
private String baseAuthPassword;
/**
* Rhapsody HTTP Client Constructor
*
* @param baseURL the base url for the Rhapsody API
* @param baseAuthUsername the username for the Rhapsody API User
* @param baseAuthPassword the password for the Rhapsody API User
* @return RhapsodyHttpClient
*/
public RhapsodyHttpClient(String baseURL, String baseAuthUsername, String baseAuthPassword)
{
this.baseURL = baseURL;
this.baseAuthUsername = baseAuthUsername;
this.baseAuthPassword = baseAuthPassword;
this.httpclient = new DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
new UsernamePasswordCredentials(baseAuthUsername, baseAuthPassword)
);
}
/**
* Performs an HTTP Get with optional headers and query parameters
*
* @param path the relative path after the baseURL to do an HTTP GET
* @param headers any additional headers to append to the request
* @param baseAuthPassword the password for the Rhapsody API User
* @return HttpResponse
*/
public HttpResponse HttpGet(String path, Map headers = null, Map queryParameters = null)
{
String url = baseURL + path;
url = setQueryParameters(url, queryParameters);
HttpGet request = new HttpGet(url);
setHeaders(request, headers);
HttpResponse response = executeRequest(request);
return response;
}
public HttpResponse HttpPut(String path, String payload, Map headers = null, Map queryParameters = null)
{
String url = baseURL + path;
url = setQueryParameters(url, queryParameters);
HttpPut request = new HttpPut(url);
StringEntity entity = new StringEntity(payload);
request.setEntity(entity);
setHeaders(request, headers);
HttpResponse response = executeRequest(request);
return response;
}
public HttpResponse HttpPost(String path, String payload, Map headers = null, Map queryParameters = null)
{
String url = baseURL + path;
url = setQueryParameters(url, queryParameters);
HttpPost request = new HttpPost(url);
StringEntity entity = new StringEntity(payload);
request.setEntity(entity);
setHeaders(request, headers);
HttpResponse response = executeRequest(request);
return response;
}
public HttpResponse HttpDelete(String path, String payload = null, Map headers = null, Map queryParameters = null)
{
String url = baseURL + path;
url = setQueryParameters(url, queryParameters);
HttpPost request = new HttpDelete(url);
if (payload != null)
{
StringEntity entity = new StringEntity(payload);
request.setEntity(entity);
}
setHeaders(request, headers);
HttpResponse response = executeRequest(request);
return response;
}
public String GetResponseBodyAsString(HttpResponse response, String encoding = "UTF-8")
{
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null)
{
return EntityUtils.toString(responseEntity, encoding);
}
return null;
}
/**
* Sets the headers for the request. Automatically includes the CSRF Token header with the request.
*
* @param request the request object to append to
* @param headers any additional headers to append to the request
*/
private void setHeaders(HttpMessage request, Map headers)
{
if (this.CSRFToken != null)
{
request.addHeader("X-CSRF-Token", this.CSRFToken)
}
if (headers != null)
{
headers.each{ key, value ->
request.addHeader(key, value)
}
}
}
private String setQueryParameters(String url, Map queryParameters)
{
if (queryParameters != null)
{
url += "?";
String params = "";
queryParameters.each{ key, value ->
params += (URLEncoder.encode(key, StandardCharsets.UTF_8.toString()) + "=" + URLEncoder.encode(value, StandardCharsets.UTF_8.toString()));
}
url += params;
}
return url;
}
private HttpResponse executeRequest(HttpMessage request)
{
HttpResponse response = this.httpclient.execute(request);
this.CSRFToken = response.getFirstHeader("X-CSRF-Token").getValue();
return response;
}
}