// Create and set RequestEntity
ReqEntity bean = request.getBody();
if (bean != null) {
try {
AbstractHttpEntity entity = new ByteArrayEntity(bean.getBody().getBytes(bean.getCharSet()));
entity.setContentType(bean.getContentTypeCharsetFormatted());
eeMethod.setEntity(entity);
} catch (UnsupportedEncodingException ex) {
for(View view: views){
view.doError(Util.getStackTrace(ex));
view.doEnd();
}
return;
}
}
}
// SSL
// Set the hostname verifier:
SSLHostnameVerifier verifier = request.getSslHostNameVerifier();
final X509HostnameVerifier hcVerifier;
switch(verifier){
case STRICT:
hcVerifier = SSLSocketFactory.STRICT_HOSTNAME_VERIFIER;
break;
case BROWSER_COMPATIBLE:
hcVerifier = SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
break;
case ALLOW_ALL:
hcVerifier = SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
break;
default:
hcVerifier = SSLSocketFactory.STRICT_HOSTNAME_VERIFIER;
break;
}
// Register the SSL Scheme:
if(urlProtocol.equalsIgnoreCase("https")){
final String trustStorePath = request.getSslTrustStore();
final KeyStore trustStore = StringUtil.isStrEmpty(trustStorePath)?
null:
getTrustStore(trustStorePath, request.getSslTrustStorePassword());
SSLSocketFactory socketFactory = new SSLSocketFactory(
"TLS", // Algorithm
null, // Keystore
null, // Keystore password
trustStore,
null, // Secure Random
hcVerifier);
Scheme sch = new Scheme(urlProtocol, urlPort, socketFactory);
httpclient.getConnectionManager().getSchemeRegistry().register(sch);
}
// How to handle retries and redirects:
httpclient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler());
httpclient.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS,
request.isFollowRedirect());
// Now Execute:
long startTime = System.currentTimeMillis();
HttpResponse http_res = httpclient.execute((HttpUriRequest) method,
httpContext);
long endTime = System.currentTimeMillis();
ResponseBean response = new ResponseBean();
response.setExecutionTime(endTime - startTime);
response.setStatusCode(http_res.getStatusLine().getStatusCode());
response.setStatusLine(http_res.getStatusLine().toString());
final Header[] responseHeaders = http_res.getAllHeaders();
String contentType = null;
for (Header header : responseHeaders) {
response.addHeader(header.getName(), header.getValue());
if(header.getName().equalsIgnoreCase("content-type")) {
contentType = header.getValue();
}
}
// find out the charset:
final Charset charset;
{
Charset c;
if(contentType != null) {
final String charsetStr = Util.getCharsetFromContentType(contentType);
try{
c = Charset.forName(charsetStr);
}
catch(IllegalCharsetNameException ex) {
LOG.log(Level.WARNING, "Charset name is illegal: {0}", charsetStr);
c = Charset.defaultCharset();
}
catch(UnsupportedCharsetException ex) {
LOG.log(Level.WARNING, "Charset {0} is not supported in this JVM.", charsetStr);
c = Charset.defaultCharset();
}
catch(IllegalArgumentException ex) {
LOG.log(Level.WARNING, "Charset parameter is not available in Content-Type header!");
c = Charset.defaultCharset();
}
}
else {
c = Charset.defaultCharset();
LOG.log(Level.WARNING, "Content-Type header not available in response. Using platform default encoding: {0}", c.name());
}
charset = c;
}
final HttpEntity entity = http_res.getEntity();
if(entity != null){
InputStream is = entity.getContent();
try{
String responseBody = StreamUtil.inputStream2String(is, charset);
if (responseBody != null) {
response.setResponseBody(responseBody);
}