You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by la...@chase.com on 2008/04/02 19:33:52 UTC
HttpClient Sockettimeout does not work
Hello,
I am using httpclient 3.1. I am trying to make a http request that should
timeout when a response is not revceived within 2 minutes. The requirement
is also to retry 3 times before throwing back an application exception.
When I set the socket timeout to >90,000 milliseconds, the timeout never
works. Sometimes, I see the connection waiting for more than 2 mins for a
response instead of throwing a SocketTimeoutException. Below is the code
sample that I am using to make the HttpRequest.
String proxyPortNumber=
(String)PropertiesUtil.getIonProps().getProperty(IonConstants.PROXYPORT);
String proxyServer =
(String)PropertiesUtil.getIonProps().getProperty(IonConstants.PROXYSERVER);
HttpClient client = new HttpClient();
client.getHostConfiguration().setProxy(proxyServer,
Integer.parseInt(proxyPortNumber));
Integer connWaitTime=new Integer("120000");
PostMethod postMethod = new PostMethod(url);
HttpMethodRetryHandler retryhandler = new
HttpMethodRetryHandler() {
public boolean retryMethod(
final HttpMethod method,
final IOException exception,
int executionCount) {
if (executionCount >= 3) {
// Do not retry if over max retry
count
return false;
}
System.out.println("Retrying Request::" +
executionCount);
if (exception instanceof
java.net.SocketTimeoutException) {
// Retry if the server dropped
connection on us
return true;
}
if (!method.isRequestSent()) {
// Retry if the request has not
been sent fully or
// if it's OK to retry methods
that have been sent
return true;
}
// otherwise do not retry
return false;
}
};
client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
retryhandler);
//client.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,connWaitTime);
postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,connWaitTime);
System.out.println("ConnWaitTime ::" +
postMethod.getParams().getParameter(HttpMethodParams.SO_TIMEOUT));
postMethod.setRequestEntity(new
StringRequestEntity(xmlData, null, null));
postMethod.setRequestHeader("Content-type",
"text/xml");
int responseCode =
client.executeMethod(postMethod);
BufferedReader rd = new BufferedReader(new
InputStreamReader(postMethod.getResponseBodyAsStream()));
String line;
while ((line = rd.readLine()) != null)
{
response += line + "\n";
}
//System.out.println("responseBody " +
responseBody);
postMethod.releaseConnection();
I hope you can help me.
Thanks
-----------------------------------------
This transmission may contain information that is privileged,
confidential, legally privileged, and/or exempt from disclosure
under applicable law. If you are not the intended recipient, you
are hereby notified that any disclosure, copying, distribution, or
use of the information contained herein (including any reliance
thereon) is STRICTLY PROHIBITED. Although this transmission and
any attachments are believed to be free of any virus or other
defect that might affect any computer system into which it is
received and opened, it is the responsibility of the recipient to
ensure that it is virus free and no responsibility is accepted by
JPMorgan Chase & Co., its subsidiaries and affiliates, as
applicable, for any loss or damage arising in any way from its use.
If you received this transmission in error, please immediately
contact the sender and destroy the material in its entirety,
whether in electronic or hard copy format. Thank you.
Re: HttpClient Sockettimeout does not work
Posted by Oleg Kalnichevski <ol...@apache.org>.
lavanya.x.sambasivan@chase.com wrote:
> Hello,
>
> I am using httpclient 3.1. I am trying to make a http request that should
> timeout when a response is not revceived within 2 minutes.
See definition of the socket timeout
Oleg
The requirement
> is also to retry 3 times before throwing back an application exception.
> When I set the socket timeout to >90,000 milliseconds, the timeout never
> works. Sometimes, I see the connection waiting for more than 2 mins for a
> response instead of throwing a SocketTimeoutException. Below is the code
> sample that I am using to make the HttpRequest.
>
>
>
> String proxyPortNumber=
> (String)PropertiesUtil.getIonProps().getProperty(IonConstants.PROXYPORT);
> String proxyServer =
> (String)PropertiesUtil.getIonProps().getProperty(IonConstants.PROXYSERVER);
>
> HttpClient client = new HttpClient();
> client.getHostConfiguration().setProxy(proxyServer,
> Integer.parseInt(proxyPortNumber));
>
> Integer connWaitTime=new Integer("120000");
> PostMethod postMethod = new PostMethod(url);
> HttpMethodRetryHandler retryhandler = new
> HttpMethodRetryHandler() {
> public boolean retryMethod(
> final HttpMethod method,
> final IOException exception,
> int executionCount) {
> if (executionCount >= 3) {
> // Do not retry if over max retry
> count
>
> return false;
> }
> System.out.println("Retrying Request::" +
> executionCount);
> if (exception instanceof
> java.net.SocketTimeoutException) {
> // Retry if the server dropped
> connection on us
> return true;
> }
> if (!method.isRequestSent()) {
> // Retry if the request has not
> been sent fully or
> // if it's OK to retry methods
> that have been sent
> return true;
> }
> // otherwise do not retry
> return false;
> }
> };
>
> client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
> retryhandler);
>
> //client.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,connWaitTime);
>
> postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,connWaitTime);
> System.out.println("ConnWaitTime ::" +
> postMethod.getParams().getParameter(HttpMethodParams.SO_TIMEOUT));
> postMethod.setRequestEntity(new
> StringRequestEntity(xmlData, null, null));
> postMethod.setRequestHeader("Content-type",
> "text/xml");
>
>
> int responseCode =
> client.executeMethod(postMethod);
> BufferedReader rd = new BufferedReader(new
> InputStreamReader(postMethod.getResponseBodyAsStream()));
> String line;
> while ((line = rd.readLine()) != null)
> {
> response += line + "\n";
> }
> //System.out.println("responseBody " +
> responseBody);
> postMethod.releaseConnection();
>
>
> I hope you can help me.
>
> Thanks
>
>
>
> -----------------------------------------
> This transmission may contain information that is privileged,
> confidential, legally privileged, and/or exempt from disclosure
> under applicable law. If you are not the intended recipient, you
> are hereby notified that any disclosure, copying, distribution, or
> use of the information contained herein (including any reliance
> thereon) is STRICTLY PROHIBITED. Although this transmission and
> any attachments are believed to be free of any virus or other
> defect that might affect any computer system into which it is
> received and opened, it is the responsibility of the recipient to
> ensure that it is virus free and no responsibility is accepted by
> JPMorgan Chase & Co., its subsidiaries and affiliates, as
> applicable, for any loss or damage arising in any way from its use.
> If you received this transmission in error, please immediately
> contact the sender and destroy the material in its entirety,
> whether in electronic or hard copy format. Thank you.
---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org