}
public void run() {
HttpResponse response = null;
DefaultHttpClientConnection conn = new DefaultHttpClientConnection();
String hostname = targetHost.getHostName();
int port = targetHost.getPort();
if (port == -1) {
port = 80;
}
// Populate the execution context
this.context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
this.context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, this.targetHost);
this.context.setAttribute(ExecutionContext.HTTP_REQUEST, this.request);
stats.start();
request.setParams(new DefaultedHttpParams(new BasicHttpParams(), this.params));
for (int i = 0; i < count; i++) {
try {
resetHeader(request);
if (!conn.isOpen()) {
Socket socket = null;
if ("https".equals(targetHost.getSchemeName())) {
if (disableSSLVerification) {
SSLContext sc = SSLContext.getInstance("SSL");
if (identityStorePath != null) {
KeyStore identityStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(identityStorePath);
try {
identityStore.load(instream, identityStorePassword.toCharArray());
} finally {
if (instream != null) {
try { instream.close(); } catch (IOException ignore) {}
}
}
KeyManagerFactory kmf = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmf.init(identityStore, identityStorePassword.toCharArray());
sc.init(kmf.getKeyManagers(), trustAllCerts, null);
} else {
sc.init(null, trustAllCerts, null);
}
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
socket = sc.getSocketFactory().createSocket(hostname, port);
} else {
if (trustStorePath != null) {
System.setProperty("javax.net.ssl.trustStore", trustStorePath);
}
if (trustStorePassword != null) {
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
}
SocketFactory socketFactory = SSLSocketFactory.getDefault();
socket = socketFactory.createSocket(hostname, port);
}
} else {
socket = new Socket(hostname, port);
}
conn.bind(socket, params);
}
try {
// Prepare request
this.httpexecutor.preProcess(this.request, this.httpProcessor, this.context);
// Execute request and get a response
response = this.httpexecutor.execute(this.request, conn, this.context);
// Finalize response
this.httpexecutor.postProcess(response, this.httpProcessor, this.context);
} catch (HttpException e) {
stats.incWriteErrors();
if (this.verbosity >= 2) {
System.err.println("Failed HTTP request : " + e.getMessage());
}
continue;
}
verboseOutput(response);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
stats.incSuccessCount();
} else {
stats.incFailureCount();
continue;
}
HttpEntity entity = response.getEntity();
if (entity != null) {
String charset = EntityUtils.getContentCharSet(entity);
if (charset == null) {
charset = HTTP.DEFAULT_CONTENT_CHARSET;
}
long contentlen = 0;
if (entity != null) {
InputStream instream = entity.getContent();
int l = 0;
while ((l = instream.read(this.buffer)) != -1) {
stats.incTotalBytesRecv(l);
contentlen += l;
if (this.verbosity >= 4) {
String s = new String(this.buffer, 0, l, charset);
System.out.print(s);
}
}
instream.close();
}
stats.setContentLength(contentlen);
}
if (this.verbosity >= 4) {
System.out.println();
System.out.println();
}
if (!keepalive || !this.connstrategy.keepAlive(response, this.context)) {
conn.close();
} else {
stats.incKeepAliveCount();
}
} catch (IOException ex) {
ex.printStackTrace();
stats.incFailureCount();
if (this.verbosity >= 2) {
System.err.println("I/O error: " + ex.getMessage());
}
} catch (Exception ex) {
ex.printStackTrace();
stats.incFailureCount();
if (this.verbosity >= 2) {
System.err.println("Generic error: " + ex.getMessage());
}
}
}
stats.finish();
if (response != null) {
Header header = response.getFirstHeader("Server");
if (header != null) {
stats.setServerName(header.getValue());
}
}
try {
conn.close();
} catch (IOException ex) {
ex.printStackTrace();
stats.incFailureCount();
if (this.verbosity >= 2) {
System.err.println("I/O error: " + ex.getMessage());