res.setSampleLabel(url.toString()); // May be replaced later
res.setHTTPMethod(method);
res.setURL(url);
HttpClient httpClient = setupClient(url);
HttpRequestBase httpRequest = null;
try {
URI uri = url.toURI();
if (method.equals(POST)) {
httpRequest = new HttpPost(uri);
} else if (method.equals(PUT)) {
httpRequest = new HttpPut(uri);
} else if (method.equals(HEAD)) {
httpRequest = new HttpHead(uri);
} else if (method.equals(TRACE)) {
httpRequest = new HttpTrace(uri);
} else if (method.equals(OPTIONS)) {
httpRequest = new HttpOptions(uri);
} else if (method.equals(DELETE)) {
httpRequest = new HttpDelete(uri);
} else if (method.equals(GET)) {
httpRequest = new HttpGet(uri);
} else {
throw new IllegalArgumentException("Unexpected method: "+method);
}
setupRequest(url, httpRequest, res); // can throw IOException
} catch (Exception e) {
res.sampleStart();
res.sampleEnd();
HTTPSampleResult err = errorResult(e, res);
err.setSampleLabel("Error: " + url.toString());
return err;
}
HttpContext localContext = new BasicHttpContext();
res.sampleStart();
final CacheManager cacheManager = getCacheManager();
if (cacheManager != null && GET.equalsIgnoreCase(method)) {
if (cacheManager.inCache(url)) {
res.sampleEnd();
res.setResponseNoContent();
res.setSuccessful(true);
return res;
}
}
try {
currentRequest = httpRequest;
// Handle the various methods
if (method.equals(POST)) {
String postBody = sendPostData((HttpPost)httpRequest);
res.setQueryString(postBody);
} else if (method.equals(PUT)) {
String putBody = sendPutData((HttpPut)httpRequest);
res.setQueryString(putBody);
}
HttpResponse httpResponse = httpClient.execute(httpRequest, localContext); // perform the sample
// Needs to be done after execute to pick up all the headers
res.setRequestHeaders(getConnectionHeaders((HttpRequest) localContext.getAttribute(ExecutionContext.HTTP_REQUEST)));
Header contentType = httpResponse.getLastHeader(HEADER_CONTENT_TYPE);