in shenyu-sdk/shenyu-sdk-httpclient/src/main/java/org/apache/shenyu/sdk/httpclient/HttpShenyuSdkClient.java [108:174]
protected ShenyuResponse doRequest(final ShenyuRequest request) throws IOException {
String url = request.getUrl();
String body = request.getBody();
RequestBuilder requestBuilder;
switch (request.getHttpMethod()) {
case GET:
requestBuilder = RequestBuilder.get(url);
break;
case HEAD:
requestBuilder = RequestBuilder.head(url);
break;
case POST:
requestBuilder = RequestBuilder.post(url);
break;
case PUT:
requestBuilder = RequestBuilder.put(url);
break;
case DELETE:
requestBuilder = RequestBuilder.delete(url);
break;
case OPTIONS:
requestBuilder = RequestBuilder.options(url);
break;
case TRACE:
requestBuilder = RequestBuilder.trace(url);
break;
default:
requestBuilder = RequestBuilder.patch(url);
break;
}
if (StringUtils.isNotBlank(body)) {
requestBuilder.setEntity(createStringEntity(body));
}
Map<String, Collection<String>> headers = request.getHeaders();
for (String name : headers.keySet()) {
for (String value : headers.get(name)) {
requestBuilder.addHeader(name, value);
}
}
Future<HttpResponse> execute = httpAsyncClient.execute(requestBuilder.build(), new FutureCallback<>() {
@Override
public void completed(final HttpResponse response) {
LOG.debug("HttpResponse completed statusLine={}", response.getStatusLine());
}
@Override
public void failed(final Exception ex) {
LOG.error("HttpResponse failed", ex);
}
@Override
public void cancelled() {
LOG.debug("HttpResponse cancelled.");
}
});
try {
HttpResponse response = execute.get();
return new ShenyuResponse(response.getStatusLine().getStatusCode(), response.getStatusLine().getReasonPhrase(),
Arrays.stream(response.getAllHeaders()).collect(Collectors.groupingBy(Header::getName, HashMap::new,
Collectors.mapping(Header::getValue, Collectors.toCollection(LinkedList::new)))),
EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8), request);
} catch (Exception e) {
throw new ShenyuException(e);
}
}