use of org.apache.http.StatusLine in project platform_external_apache-http by android.
the class BasicResponseHandler method handleResponse.
/**
* Returns the response body as a String if the response was successful (a
* 2xx status code). If no response body exists, this returns null. If the
* response was unsuccessful (>= 300 status code), throws an
* {@link HttpResponseException}.
*/
public String handleResponse(final HttpResponse response) throws HttpResponseException, IOException {
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() >= 300) {
throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase());
}
HttpEntity entity = response.getEntity();
return entity == null ? null : EntityUtils.toString(entity);
}
use of org.apache.http.StatusLine in project platform_external_apache-http by android.
the class DefaultHttpResponseFactory method newHttpResponse.
// non-javadoc, see interface HttpResponseFactory
public HttpResponse newHttpResponse(final ProtocolVersion ver, final int status, HttpContext context) {
if (ver == null) {
throw new IllegalArgumentException("HTTP version may not be null");
}
final Locale loc = determineLocale(context);
final String reason = reasonCatalog.getReason(status, loc);
StatusLine statusline = new BasicStatusLine(ver, status, reason);
return new BasicHttpResponse(statusline, reasonCatalog, loc);
}
use of org.apache.http.StatusLine in project platform_external_apache-http by android.
the class HttpResponseParser method parseHead.
protected HttpMessage parseHead(final SessionInputBuffer sessionBuffer) throws IOException, HttpException, ParseException {
this.lineBuf.clear();
int i = sessionBuffer.readLine(this.lineBuf);
if (i == -1) {
throw new NoHttpResponseException("The target server failed to respond");
}
//create the status line from the status string
ParserCursor cursor = new ParserCursor(0, this.lineBuf.length());
StatusLine statusline = lineParser.parseStatusLine(this.lineBuf, cursor);
return this.responseFactory.newHttpResponse(statusline, null);
}
use of org.apache.http.StatusLine in project jmeter by apache.
the class HTTPHC4Impl method sample.
@Override
protected HTTPSampleResult sample(URL url, String method, boolean areFollowingRedirect, int frameDepth) {
if (log.isDebugEnabled()) {
log.debug("Start : sample {} method {} followingRedirect {} depth {}", url, method, areFollowingRedirect, frameDepth);
}
HTTPSampleResult res = createSampleResult(url, method);
CloseableHttpClient httpClient = setupClient(url);
HttpRequestBase httpRequest = null;
try {
URI uri = url.toURI();
if (method.equals(HTTPConstants.POST)) {
httpRequest = new HttpPost(uri);
} else if (method.equals(HTTPConstants.GET)) {
// otherwise we use HttpGetWithEntity
if (!areFollowingRedirect && ((!hasArguments() && getSendFileAsPostBody()) || getSendParameterValuesAsPostBody())) {
httpRequest = new HttpGetWithEntity(uri);
} else {
httpRequest = new HttpGet(uri);
}
} else if (method.equals(HTTPConstants.PUT)) {
httpRequest = new HttpPut(uri);
} else if (method.equals(HTTPConstants.HEAD)) {
httpRequest = new HttpHead(uri);
} else if (method.equals(HTTPConstants.TRACE)) {
httpRequest = new HttpTrace(uri);
} else if (method.equals(HTTPConstants.OPTIONS)) {
httpRequest = new HttpOptions(uri);
} else if (method.equals(HTTPConstants.DELETE)) {
httpRequest = new HttpDelete(uri);
} else if (method.equals(HTTPConstants.PATCH)) {
httpRequest = new HttpPatch(uri);
} else if (HttpWebdav.isWebdavMethod(method)) {
httpRequest = new HttpWebdav(method, uri);
} else {
throw new IllegalArgumentException("Unexpected method: '" + method + "'");
}
// can throw IOException
setupRequest(url, httpRequest, res);
} catch (Exception e) {
res.sampleStart();
res.sampleEnd();
errorResult(e, res);
return res;
}
HttpContext localContext = new BasicHttpContext();
setupClientContextBeforeSample(localContext);
res.sampleStart();
final CacheManager cacheManager = getCacheManager();
if (cacheManager != null && HTTPConstants.GET.equalsIgnoreCase(method) && cacheManager.inCache(url)) {
return updateSampleResultForResourceInCache(res);
}
CloseableHttpResponse httpResponse = null;
try {
currentRequest = httpRequest;
handleMethod(method, res, httpRequest, localContext);
// store the SampleResult in LocalContext to compute connect time
localContext.setAttribute(SAMPLER_RESULT_TOKEN, res);
// perform the sample
httpResponse = executeRequest(httpClient, httpRequest, localContext, url);
// Needs to be done after execute to pick up all the headers
final HttpRequest request = (HttpRequest) localContext.getAttribute(HttpCoreContext.HTTP_REQUEST);
extractClientContextAfterSample(localContext);
// We've finished with the request, so we can add the LocalAddress to it for display
final InetAddress localAddr = (InetAddress) httpRequest.getParams().getParameter(ConnRoutePNames.LOCAL_ADDRESS);
if (localAddr != null) {
request.addHeader(HEADER_LOCAL_ADDRESS, localAddr.toString());
}
res.setRequestHeaders(getConnectionHeaders(request));
Header contentType = httpResponse.getLastHeader(HTTPConstants.HEADER_CONTENT_TYPE);
if (contentType != null) {
String ct = contentType.getValue();
res.setContentType(ct);
res.setEncodingAndType(ct);
}
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
res.setResponseData(readResponse(res, entity.getContent(), entity.getContentLength()));
}
// Done with the sampling proper.
res.sampleEnd();
currentRequest = null;
// Now collect the results into the HTTPSampleResult:
StatusLine statusLine = httpResponse.getStatusLine();
int statusCode = statusLine.getStatusCode();
res.setResponseCode(Integer.toString(statusCode));
res.setResponseMessage(statusLine.getReasonPhrase());
res.setSuccessful(isSuccessCode(statusCode));
res.setResponseHeaders(getResponseHeaders(httpResponse, localContext));
if (res.isRedirect()) {
final Header headerLocation = httpResponse.getLastHeader(HTTPConstants.HEADER_LOCATION);
if (headerLocation == null) {
// HTTP protocol violation, but avoids NPE
throw new IllegalArgumentException("Missing location header in redirect for " + httpRequest.getRequestLine());
}
String redirectLocation = headerLocation.getValue();
res.setRedirectLocation(redirectLocation);
}
// record some sizes to allow HTTPSampleResult.getBytes() with different options
HttpConnectionMetrics metrics = (HttpConnectionMetrics) localContext.getAttribute(CONTEXT_METRICS);
long headerBytes = // condensed length (without \r)
(long) res.getResponseHeaders().length() + // Add \r for each header
(long) httpResponse.getAllHeaders().length + // Add \r for initial header
1L + // final \r\n before data
2L;
long totalBytes = metrics.getReceivedBytesCount();
res.setHeadersSize((int) headerBytes);
res.setBodySize(totalBytes - headerBytes);
res.setSentBytes(metrics.getSentBytesCount());
if (log.isDebugEnabled()) {
log.debug("ResponseHeadersSize={} Content-Length={} Total={}", res.getHeadersSize(), res.getBodySizeAsLong(), (res.getHeadersSize() + res.getBodySizeAsLong()));
}
// If we redirected automatically, the URL may have changed
if (getAutoRedirects()) {
HttpUriRequest req = (HttpUriRequest) localContext.getAttribute(HttpCoreContext.HTTP_REQUEST);
HttpHost target = (HttpHost) localContext.getAttribute(HttpCoreContext.HTTP_TARGET_HOST);
URI redirectURI = req.getURI();
if (redirectURI.isAbsolute()) {
res.setURL(redirectURI.toURL());
} else {
res.setURL(new URL(new URL(target.toURI()), redirectURI.toString()));
}
}
// Store any cookies received in the cookie manager:
saveConnectionCookies(httpResponse, res.getURL(), getCookieManager());
// Save cache information
if (cacheManager != null) {
cacheManager.saveDetails(httpResponse, res);
}
// Follow redirects and download page resources if appropriate:
res = resultProcessing(areFollowingRedirect, frameDepth, res);
} catch (IOException e) {
log.debug("IOException", e);
if (res.getEndTime() == 0) {
res.sampleEnd();
}
// pick up headers if failed to execute the request
if (res.getRequestHeaders() != null) {
log.debug("Overwriting request old headers: {}", res.getRequestHeaders());
}
res.setRequestHeaders(getConnectionHeaders((HttpRequest) localContext.getAttribute(HttpCoreContext.HTTP_REQUEST)));
errorResult(e, res);
return res;
} catch (RuntimeException e) {
log.debug("RuntimeException", e);
if (res.getEndTime() == 0) {
res.sampleEnd();
}
errorResult(e, res);
return res;
} finally {
JOrphanUtils.closeQuietly(httpResponse);
currentRequest = null;
JMeterContextService.getContext().getSamplerContext().remove(HTTPCLIENT_TOKEN);
}
return res;
}
use of org.apache.http.StatusLine in project jackrabbit by apache.
the class BaseDavRequest method getResponseException.
/**
* Obtain a {@link DavException} representing the response.
* @throws IllegalStateException when the response is considered to be successful
*/
public DavException getResponseException(HttpResponse response) {
if (succeeded(response)) {
String msg = "Cannot retrieve exception from successful response.";
log.warn(msg);
throw new IllegalStateException(msg);
}
StatusLine st = response.getStatusLine();
Element responseRoot = null;
try {
responseRoot = getResponseBodyAsDocument(response.getEntity()).getDocumentElement();
} catch (IOException e) {
// non-parseable body -> use null element
}
return new DavException(st.getStatusCode(), st.getReasonPhrase(), null, responseRoot);
}
Aggregations