HttpComponents HttpClient: Difference between revisions
(5 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
* http://hc.apache.org/httpcomponents-client-ga/ | * http://hc.apache.org/httpcomponents-client-ga/ | ||
* | * [http://hc.apache.org/httpcomponents-client-ga/tutorial/html/index.html HttpClient Tutorial] | ||
=Internal= | =Internal= | ||
Line 12: | Line 12: | ||
Simplest GET usage pattern: | Simplest GET usage pattern: | ||
<pre> | |||
... | |||
HttpMethod method = new GetMethod("http://localhost:8080/"); | |||
try { | |||
int responseCode = httpClient.executeMethod(method); | |||
if (responseCode != HttpStatus.SC_OK) { | |||
throw new Exception("HTTP invocation failed: " + method.getStatusLine()); | |||
} | } | ||
byte[] body = method.getResponseBody(); | |||
... | |||
} | |||
finally { | |||
method.releaseConnection(); | |||
} | |||
</pre> | |||
=Configuring Retry Count in Presence of Network Errors= | |||
Before starting the client: | Before starting the client: | ||
<pre> | |||
HttpClient httpClient = ...; | |||
int retryCount = 1; | |||
httpClient.getParams().setParameter( | |||
HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(retryCount , false)); | |||
</pre> | |||
=Setting Socket Connect Timeout= | |||
The socket connect timeout is specified in milliseconds and it is configured using "http.connection.timeout" system property (declared as org.apache.http.params.CoreConnectionPNames.CONNECTION_TIMEOUT): | The socket connect timeout is specified in milliseconds and it is configured using "http.connection.timeout" system property (declared as org.apache.http.params.CoreConnectionPNames.CONNECTION_TIMEOUT): | ||
<pre> | |||
HttpClient httpClient = ...; | |||
httpClient.getParams().setIntParameter("http.connection.timeout", 5555); | |||
</pre> | |||
=Setting Socket SO_TIMEOUT= | |||
The socket SO_TIMEOUT is specified in milliseconds and it is configured using "http.socket.timeout" system property (declared as org.apache.http.params.CoreConnectionPNames.SO_TIMEOUT): | The socket SO_TIMEOUT is specified in milliseconds and it is configured using "http.socket.timeout" system property (declared as org.apache.http.params.CoreConnectionPNames.SO_TIMEOUT): | ||
<pre> | |||
HttpClient httpClient = ...; | |||
httpClient.getParams().setIntParameter("http.socket.timeout", 5555); | |||
</pre> | |||
Also see | Also see {{Internal|Socket SO TIMEOUT#Subjects|Socket SO_TIMEOUT}} | ||
=Configure HttpClient to Accept Self-Signed Certificates= | |||
{{Internal|Configure a Java HTTP Client to Accept Self-Signed Certificates|Configure a Java HTTP Client to Accept Self-Signed Certificates}} | |||
=Apache HTTP Components Fluent Adapter= | |||
{{External|http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fluent.html}} | |||
=Maven= | =Maven= | ||
Line 107: | Line 93: | ||
=Redirect Handling= | =Redirect Handling= | ||
{{ | {{External2|http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/fundamentals.html#d5e334|http://hc.apache.org/httpclient-3.x/redirects.html}} | ||
Turn it off: | Turn it off: |
Latest revision as of 23:50, 4 April 2019
External
Internal
Overview
Simplest GET usage pattern:
... HttpMethod method = new GetMethod("http://localhost:8080/"); try { int responseCode = httpClient.executeMethod(method); if (responseCode != HttpStatus.SC_OK) { throw new Exception("HTTP invocation failed: " + method.getStatusLine()); } byte[] body = method.getResponseBody(); ... } finally { method.releaseConnection(); }
Configuring Retry Count in Presence of Network Errors
Before starting the client:
HttpClient httpClient = ...; int retryCount = 1; httpClient.getParams().setParameter( HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(retryCount , false));
Setting Socket Connect Timeout
The socket connect timeout is specified in milliseconds and it is configured using "http.connection.timeout" system property (declared as org.apache.http.params.CoreConnectionPNames.CONNECTION_TIMEOUT):
HttpClient httpClient = ...; httpClient.getParams().setIntParameter("http.connection.timeout", 5555);
Setting Socket SO_TIMEOUT
The socket SO_TIMEOUT is specified in milliseconds and it is configured using "http.socket.timeout" system property (declared as org.apache.http.params.CoreConnectionPNames.SO_TIMEOUT):
HttpClient httpClient = ...; httpClient.getParams().setIntParameter("http.socket.timeout", 5555);
Also see
Configure HttpClient to Accept Self-Signed Certificates
Apache HTTP Components Fluent Adapter
Maven
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.1</version> </dependency>
Multithreaded Execution
In order to allow execution of multiple HTTP requests concurrently on multiple threads, httpclient must be equipped with a pooling connection manager such as PoolingClientConnectionManager.
Redirect Handling
Turn it off:
RedirectStrategy redirectStrategy = new RedirectStrategy() { @Override public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) throws ProtocolException { return false; } @Override public HttpUriRequest getRedirect(HttpRequest request, HttpResponse response, HttpContext context) throws ProtocolException { throw new RuntimeException("getRedirect() NOT YET IMPLEMENTED"); } }; ... HttpClients.custom().setRedirectStrategy(redirectStrategy).build();
Troubleshooting
httpclient Automatically Follows Redirects
Sometimes this is not the behavior you want, for example when you try to get the OAuth token which is embedded in the redirect Location that you are supposed to parse. See Redirect Handling above.