public class HTTPClient
extends java.lang.Object
// initialization
StdoutLogAdapter logAdapter = new StdoutLogAdapter(); // you may implement your own log adapter
logAdapter.init(null);
logAdapter.setLogLevel(LogAdapterInterface.LOG_DEBUG);
HTTPClient httpClient = new HTTPClient(logAdapter);
httpClient.setHTTPProcessingTimeout(30000);
// --------------------
// synchronous programming example 1
HTTPRequest httpRequest = httpClient.newRequest("GET", "https://www.dkfqa.com");
long requestId = httpClient.sendAsyncRequest(httpRequest);
HTTPResponse httpResponse = httpClient.waitAndGetResponse(requestId);
if (httpResponse.getHttpRequest().hasErrorException()) {
System.out.println("HTTP request failed: " + httpResponse.getHttpRequest().getErrorException());
}
else {
System.out.println(httpResponse.getHttpResponseContent().getContentAsString());
}
// synchronous programming example 2
HTTPRequest httpRequest1 = httpClient.newRequest("GET", "https://www.dkfqa.com");
httpClient.sendAsyncRequest(httpRequest1);
HTTPRequest httpRequest2 = httpClient.newRequest("GET", "https://www.dkfqa.com/content/logo183x32.gif");
httpClient.sendAsyncRequest(httpRequest2);
httpClient.waitAllResponses();
HTTPResponse httpResponse = httpClient.getNextResponse();
while (httpResponse != null) {
if (httpResponse.getHttpRequest().hasErrorException()) {
System.out.println("HTTP request failed: " + httpResponse.getHttpRequest().getErrorException());
}
else {
System.out.println(httpResponse.getHttpResponseContent().getContentAsString());
}
httpResponse = httpClient.getNextResponse();
}
// --------------------
// asynchronous programming example
// the (implemented) interface for instantly processing the received HTTP responses
public class MyAsyncResponseHandler implements HTTPClientAsyncResponseHandler {
public void onAsyncResponse(HTTPResponse httpResponse) throws Exception {
HTTPRequest httpRequest = httpResponse.getHttpRequest();
if (httpRequest.hasErrorException()) {
System.out.println("HTTP request failed for " + httpRequest.getUrl() + " | " + httpRequest.getErrorException());
}
else {
System.out.println("Receive HTTP response for request ID " + httpRequest.getId() + " = " + httpResponse.getHttpResponseHeader().getHttpStatusCode() + " " + httpResponse.getHttpResponseHeader().getReceivedHttpStatusText());
}
}
}
httpClient.setAsyncResponseHandler(new MyAsyncResponseHandler()); // set the (implemented) interface for instantly processing the received HTTP responses
HTTPRequest httpRequestA = httpClient.newRequest("GET", "https://www.dkfqa.com");
long requestIdA = httpClient.sendAsyncRequest(httpRequestA);
HTTPRequest httpRequestB = httpClient.newRequest("GET", "https://www.dkfqa.com/content/logo183x32.gif");
long requestIdB = httpClient.sendAsyncRequest(httpRequestB);
httpClient.waitAllResponses(); // synchronisation point
// --------------------
// free all internal resources
httpClient.closeAbort();
| Constructor and Description |
|---|
HTTPClient(LogAdapterInterface logAdapter)
Create a new instance with 4 processing threads.
|
HTTPClient(LogAdapterInterface logAdapter,
int numProcessingThreads)
Create a new instance with a specific number processing threads.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addClientAuthKeyManagers(java.lang.String serverHost,
int serverPort,
javax.net.ssl.KeyManager[] clientAuthKeyManagers)
Add SSL key managers for client authentication, for a particular HTTPS host and port.
|
void |
clearConnectionPool()
Close and remove all network connections from the connection pool.
|
void |
closeAbort()
Free all internal resources and close all connections of the HTTPClient.
|
void |
dumpConnectionPoolToStdout()
For debug purposes only, dump the network connection pool to stdout.
|
void |
dumpProcessingPoolToStdout()
For debug purposes only, dump the HTTP client processing pool to stdout.
|
HTTPConnectionStatistic |
getConnectionStatistic()
Performance data, get the statistic of the network connections used by the HTTPClient.
|
HTTPCookieHandler |
getCookieHandler()
Get access to the cookie handler of the HTTP client.
|
int |
getHTTPProcessingTimeout()
Get the default value for the processing timeout per URL at HTTP level.
|
HTTPResponse |
getNextResponse()
Get the next HTTP response of all completed HTTP requests.
|
int |
getNumOutstandingRequest()
Performance data, get the number of currently outstanding requests (= number of not yet completed, pending requests).
|
HTTPResponse |
getResponse(long httpRequestId)
Get the HTTP response for a particular HTTP request.
|
int |
getSSLHandshakeTimeout()
Get the SSL handshake timeout.
|
int |
getTCPConnectTimeout()
Get the TCP connect timeout.
|
long |
getTotalBytesReceived()
Get the total number of bytes which were received - counted over all ever executed HTTP/S calls.
|
long |
getTotalBytesSent()
Get the total number of bytes which were sent - counted over all ever executed HTTP/S calls.
|
HTTPRequest |
newRequest(java.lang.String httpRequestMethod,
java.lang.String url)
Create a new HTTP request, but don't send it yet.
|
void |
removeAllClientAuthKeyManagers()
Remove all SSL key managers for client authentication.
|
boolean |
resumeSuspendedHTTPRequest(long httpRequestId)
Resume a suspended HTTP request.
|
long |
sendAsyncRequest(HTTPRequest httpRequest)
Send a HTTP request as an asynchronous operation.
|
void |
setAsyncResponseHandler(HTTPClientAsyncResponseHandler asyncResponseHandler)
Set the (implemented) interface for instantly processing the received HTTP responses.
|
void |
setClientDebugger(HTTPClientDebuggerInterface clientDebugger)
Set a client debugger.
|
void |
setCountTransmitBytesInterfaces(HTTPClientCountBytesSentInterface bytesSentInterface,
HTTPClientCountBytesReceivedInterface bytesReceivedInterface)
Set callback interfaces which are called each time when the HTTP client has sent or received a data fragment to/from a server.
|
void |
setHTTPProcessingTimeout(int httpProcessingTimeoutMillis)
Set the default value for the processing timeout per URL at HTTP level.
|
void |
setLimitSSLVersion(java.lang.String limitSSLVersion)
Set/limit the maximal SSL version.
|
void |
setLocalOutboundAddress(java.net.InetAddress localOutboundAddress)
Set or unset a specific outbound IP address.
|
void |
setOverallTimeout(int overallTimeoutMillis)
Set a synthetically calculated overall timeout for the URL calls
The 3 inner timeouts are calculated as follows: At first, the SSL Handshake Timeout is calculated: as 10% of the Overall Timeout but max. |
void |
setSSLHandshakeTimeout(int sslHandshakeTimeoutMillis)
Set the SSL handshake timeout.
|
void |
setTCPConnectTimeout(int tcpConnectTimeoutMillis)
Set the TCP connect timeout.
|
void |
setTraceRequestContentTypesSet(java.util.HashSet<java.lang.String> traceRequestContentTypesSet)
Set a set of mime types for which the request content data are written to the log adapter at trace level.
|
void |
setTraceResponseContentTypesSet(java.util.HashSet<java.lang.String> traceResponseContentTypesSet)
Set a set of mime types for which the response content data are written to the log adapter at trace level.
|
void |
setTrustManager(javax.net.ssl.TrustManager[] trustManagers)
Set a specific SSL X509 trust manager, used to validate the certificate chain received from a HTTPS server during the SSL handshake.
|
void |
waitAllResponses()
Wait until all HTTP requests are completed.
|
HTTPResponse |
waitAndGetResponse(long httpRequestId)
Wait until a particular HTTP request is completed and get the corresponding HTTP response.
|
void |
waitResponse(long httpRequestId)
Wait until a particular HTTP request is completed.
|
public HTTPClient(LogAdapterInterface logAdapter)
logAdapter - the log adapter for this instance, or null if logging is disabledpublic HTTPClient(LogAdapterInterface logAdapter, int numProcessingThreads)
logAdapter - the log adapter for this instance, or null if logging is disablednumProcessingThreads - the number processing threads, valid range = 1..64java.lang.IllegalArgumentException - if the number processing threads is out of the valid rangepublic void setAsyncResponseHandler(HTTPClientAsyncResponseHandler asyncResponseHandler)
asyncResponseHandler - the (implemented) interface for instantly processing the received HTTP responseswaitAndGetResponse(long),
waitResponse(long),
getResponse(long),
getNextResponse(),
waitAllResponses()public void setLocalOutboundAddress(java.net.InetAddress localOutboundAddress)
localOutboundAddress - the specific outbound IP address, or null = use default outbound IP addresspublic void setLimitSSLVersion(java.lang.String limitSSLVersion)
limitSSLVersion - the maximal SSL versionpublic void setTrustManager(javax.net.ssl.TrustManager[] trustManagers)
trustManagers - the specific X509 trust managerpublic void addClientAuthKeyManagers(java.lang.String serverHost,
int serverPort,
javax.net.ssl.KeyManager[] clientAuthKeyManagers)
serverHost - the server name or IP addressserverPort - the server TCP/IP portclientAuthKeyManagers - the key managers for SSL client authenticationLoadPKCS12Certificate,
LoadPKCS12Certificate.getKeyManagers()public void removeAllClientAuthKeyManagers()
public void setOverallTimeout(int overallTimeoutMillis)
overallTimeoutMillis - the overall HTTP call timeout in milliseconds, not less than 10000 msjava.lang.IllegalArgumentException - if the overall HTTP call timeout is less than 10000 mssetTCPConnectTimeout(int),
setSSLHandshakeTimeout(int),
setHTTPProcessingTimeout(int)public void setTCPConnectTimeout(int tcpConnectTimeoutMillis)
tcpConnectTimeoutMillis - the TCP connect timeout in millisecondspublic int getTCPConnectTimeout()
public void setSSLHandshakeTimeout(int sslHandshakeTimeoutMillis)
sslHandshakeTimeoutMillis - the SSL handshake timeout in millisecondspublic int getSSLHandshakeTimeout()
public void setHTTPProcessingTimeout(int httpProcessingTimeoutMillis)
httpProcessingTimeoutMillis - the processing timeout per URL at HTTP level in millisecondsHTTPRequest.setRequestSpecificProcessingTimeoutMillis(long)public int getHTTPProcessingTimeout()
public void setCountTransmitBytesInterfaces(HTTPClientCountBytesSentInterface bytesSentInterface, HTTPClientCountBytesReceivedInterface bytesReceivedInterface)
bytesSentInterface - called each time when the HTTP client has sent a data fragment to a serverbytesReceivedInterface - called each time when the HTTP client has received a data fragment from a server.public HTTPRequest newRequest(java.lang.String httpRequestMethod, java.lang.String url) throws java.net.MalformedURLException
httpRequestMethod - the HTTP request method. Example: 'GET', 'POST', 'HEAD'url - the full URL. Example: 'https://www.dkfqa.com/test?param1=hello'java.net.MalformedURLException - if the URL is invalidHTTPRequest.getId(),
sendAsyncRequest(HTTPRequest)public long sendAsyncRequest(HTTPRequest httpRequest) throws java.lang.InterruptedException
httpRequest - the HTTP request to sendHTTPClientException - if the request was already sentjava.lang.InterruptedException - if somewhat failspublic HTTPResponse waitAndGetResponse(long httpRequestId)
httpRequestId - the unique ID of the HTTP requestHTTPClientException - if a HTTPClientAsyncResponseHandler is set.public void waitResponse(long httpRequestId)
httpRequestId - the unique ID of the HTTP requestHTTPClientException - if a HTTPClientAsyncResponseHandler is set.public HTTPResponse getResponse(long httpRequestId)
httpRequestId - the unique ID of the HTTP requestHTTPClientException - if a HTTPClientAsyncResponseHandler is set.waitResponse(long)public void waitAllResponses()
public HTTPResponse getNextResponse()
HTTPClientException - if a HTTPClientAsyncResponseHandler is set.waitAllResponses()public void clearConnectionPool()
public void closeAbort()
public HTTPCookieHandler getCookieHandler()
public int getNumOutstandingRequest()
public HTTPConnectionStatistic getConnectionStatistic()
public void dumpConnectionPoolToStdout()
public void dumpProcessingPoolToStdout()
public void setClientDebugger(HTTPClientDebuggerInterface clientDebugger)
clientDebugger - the client debuggerpublic boolean resumeSuspendedHTTPRequest(long httpRequestId)
httpRequestId - the unique, internal HTTP request idjava.lang.NullPointerException - if no client debugger is setsetClientDebugger(HTTPClientDebuggerInterface),
HTTPClientDebuggerInterface.onRequestBeforeSend(HTTPRequest),
HTTPRequest.getId()public void setTraceRequestContentTypesSet(java.util.HashSet<java.lang.String> traceRequestContentTypesSet)
traceRequestContentTypesSet - a set of mime types for which the request content data are written to the log adapter at trace levelpublic void setTraceResponseContentTypesSet(java.util.HashSet<java.lang.String> traceResponseContentTypesSet)
traceResponseContentTypesSet - a set of mime types for which the response content data are written to the log adapter at trace levepublic long getTotalBytesSent()
public long getTotalBytesReceived()