protected ShenyuResponse doRequest()

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);
        }
    }