in dubbo-remoting-extensions/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/restclient/URLConnectionRestClient.java [43:100]
public CompletableFuture<RestResult> send(RequestTemplate requestTemplate) {
CompletableFuture<RestResult> future = new CompletableFuture<>();
try {
HttpURLConnection connection = (HttpURLConnection) new URL(requestTemplate.getURL()).openConnection();
connection.setConnectTimeout(clientConfig.getConnectTimeout());
connection.setReadTimeout(clientConfig.getReadTimeout());
connection.setRequestMethod(requestTemplate.getHttpMethod());
prepareConnection(connection, requestTemplate.getHttpMethod());
// writeHeaders
for (String field : requestTemplate.getAllHeaders().keySet()) {
for (String value : requestTemplate.getHeaders(field)) {
connection.addRequestProperty(field, value);
}
}
// writeBody
boolean gzipEncodedRequest = requestTemplate.isGzipEncodedRequest();
boolean deflateEncodedRequest = requestTemplate.isDeflateEncodedRequest();
if (requestTemplate.isBodyEmpty()) {
future.complete(getRestResultFromConnection(connection));
return future;
}
Integer contentLength = requestTemplate.getContentLength();
if (contentLength != null) {
connection.setFixedLengthStreamingMode(contentLength);
} else {
connection.setChunkedStreamingMode(clientConfig.getChunkLength());
}
OutputStream out = connection.getOutputStream();
if (gzipEncodedRequest) {
out = new GZIPOutputStream(out);
} else if (deflateEncodedRequest) {
out = new DeflaterOutputStream(out);
}
try {
out.write(requestTemplate.getSerializedBody());
} finally {
try {
out.close();
} catch (IOException suppressed) {
}
}
future.complete(getRestResultFromConnection(connection));
} catch (Exception e) {
future.completeExceptionally(e);
}
return future;
}