import org.apache.http.client.methods.CloseableHttpResponse; //导入方法依赖的package包/类
/**
* Makes a HTTP request to the given URL using the given request body,
* parameters and HTTP headers. The parameters are used as URL parameters,
* but if there's a parameter "resourceId", it's added directly to the end
* of the URL. If there's no request body, the value can be null.
*
* @param url URL where the request is sent
* @param params request parameters
* @param requestBody request body
* @param headers HTTP headers to be added to the request
* @return response as string
*/
@Override
public ClientResponse send(String url, String requestBody, Map params, Map headers) {
// Build target URL
url = ClientUtil.buildTargetURL(url, params);
// Create HTTP client
CloseableHttpClient httpClient = HttpClients.createDefault();
// Build request
HttpUriRequest request = this.buildtHttpRequest(url, requestBody, headers);
LOGGER.info("Starting HTTP {} operation.", request.getMethod());
// Add headers
if (headers != null && !headers.isEmpty()) {
for (Map.Entry entry : headers.entrySet()) {
LOGGER.debug("Add header : \"{}\" = \"{}\"", entry.getKey(), entry.getValue());
request.setHeader(entry.getKey(), entry.getValue());
}
}
try {
//Send the request; It will immediately return the response in HttpResponse object
CloseableHttpResponse response = httpClient.execute(request);
// Get Content-Type header
Header[] contentTypeHeader = response.getHeaders("Content-Type");
String contentType = null;
// Check for null and empty
if (contentTypeHeader != null && contentTypeHeader.length > 0) {
contentType = contentTypeHeader[0].getValue();
}
// Get Status Code
int statusCode = response.getStatusLine().getStatusCode();
// Get reason phrase
String reasonPhrase = response.getStatusLine().getReasonPhrase();
// Get response payload
String responseStr = ClientUtil.getResponseString(response.getEntity());
response.close();
httpClient.close();
LOGGER.debug("REST response content type: \"{}\".", contentType);
LOGGER.debug("REST response status code: \"{}\".", statusCode);
LOGGER.debug("REST response reason phrase: \"{}\".", reasonPhrase);
LOGGER.debug("REST response : \"{}\".", responseStr);
LOGGER.info("HTTP {} operation completed.", request.getMethod());
return new ClientResponse(responseStr, contentType, statusCode, reasonPhrase);
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
LOGGER.warn("HTTP {} operation failed. An empty string is returned.", request.getMethod());
return null;
}
}