public ResponseContentSupplier performHttpRequest( TaskListener listener, RequestAction requestAction) throws InterruptedException, IOException { final PrintStream logger = listener.getLogger(); logger.println("HttpMode: " + requestAction.getMode()); logger.println(String.format("URL: %s", requestAction.getUrl())); for (HttpRequestNameValuePair header : requestAction.getHeaders()) { if (header.getName().equalsIgnoreCase("Authorization")) { logger.println(header.getName() + ": *****"); } else { logger.println(header.getName() + ": " + header.getValue()); } } DefaultHttpClient httpclient = new SystemDefaultHttpClient(); HttpClientUtil clientUtil = new HttpClientUtil(); HttpRequestBase httpRequestBase = clientUtil.createRequestBase(requestAction); HttpContext context = new BasicHttpContext(); if (authentication != null && !authentication.isEmpty()) { final Authenticator auth = HttpRequestGlobalConfig.get().getAuthentication(authentication); if (auth == null) { throw new IllegalStateException( "Authentication '" + authentication + "' doesn't exist anymore"); } logger.println("Using authentication: " + auth.getKeyName()); auth.authenticate(httpclient, context, httpRequestBase, logger, timeout); } ResponseContentSupplier responseContentSupplier; try { final HttpResponse response = clientUtil.execute(httpclient, context, httpRequestBase, logger, timeout); // The HttpEntity is consumed by the ResponseContentSupplier responseContentSupplier = new ResponseContentSupplier(response); } catch (UnknownHostException uhe) { logger.println("Treating UnknownHostException(" + uhe.getMessage() + ") as 404 Not Found"); responseContentSupplier = new ResponseContentSupplier("UnknownHostException as 404 Not Found", 404); } catch (SocketTimeoutException | ConnectException ce) { logger.println( "Treating " + ce.getClass() + "(" + ce.getMessage() + ") as 408 Request Timeout"); responseContentSupplier = new ResponseContentSupplier( ce.getClass() + "(" + ce.getMessage() + ") as 408 Request Timeout", 408); } if (consoleLogResponseBody) { logger.println("Response: \n" + responseContentSupplier.getContent()); } responseCodeIsValid(responseContentSupplier, logger); contentIsValid(responseContentSupplier, logger); return responseContentSupplier; }
private void responseCodeIsValid(ResponseContentSupplier response, PrintStream logger) throws AbortException { List<Range<Integer>> ranges = DescriptorImpl.parseToRange(validResponseCodes); for (Range<Integer> range : ranges) { if (range.contains(response.getStatus())) { logger.println("Success code from " + range); return; } } throw new AbortException( "Fail: the returned code " + response.getStatus() + " is not in the accepted range: " + ranges); }
private void logResponseToFile( FilePath workspace, PrintStream logger, ResponseContentSupplier responseContentSupplier) throws IOException, InterruptedException { FilePath outputFilePath = getOutputFilePath(workspace, logger); if (outputFilePath != null && responseContentSupplier.getContent() != null) { OutputStreamWriter write = null; try { write = new OutputStreamWriter(outputFilePath.write(), Charset.forName("UTF-8")); write.write(responseContentSupplier.getContent()); } finally { if (write != null) { write.close(); } } } }
private void contentIsValid(ResponseContentSupplier responseContentSupplier, PrintStream logger) throws AbortException { if (Strings.isNullOrEmpty(validResponseContent)) { return; } String response = responseContentSupplier.getContent(); if (!response.contains(validResponseContent)) { throw new AbortException( "Fail: Response with length " + response.length() + " doesn't contain '" + validResponseContent + "'"); } return; }