On Fri, 2005-11-04 at 12:06 -0700, Derek Sweet wrote: > What do we do with the buffer if we want the response as a string after > that?
Convert it to a string > Can we just make a call to getResponseBodyAsString() after the routine > has run through and we know that we've received the whole response in time? You can, but it will return an empty string because the content has already been consumed > I'm assuming there is nothing wrong with dynamically defining the timeout, > correct? > There's nothing wrong with it, save the fact it will not work. This is known limitation of the existing API Oleg > Derek > > -----Original Message----- > From: Oleg Kalnichevski [mailto:[EMAIL PROTECTED] > Sent: Friday, November 04, 2005 10:20 AM > To: [email protected] > Cc: Guy With Question > Subject: Re: Http timeout and 100 Continue > > On Fri, Nov 04, 2005 at 08:52:17AM -0800, Guy With Question wrote: > > Oleg, > > > > What I want to do is unblock if I don't have the entire response in x > seconds, where x = time needed to connect to the server plus the time needed > to recieve the entire response. Can you please suggest a way to do this? Can > you show me with an example? > > > > Thanks in advance. > > final int SOCKET_TIMEOUT = 1000; > final int TOTAL_TIMEOUT = 5000; > > HttpClient httpclient = new HttpClient(); GetMethod httpget = new > GetMethod("/data"); httpget.getParams().setSoTimeout(SOCKET_TIMEOUT); > try { > httpclient.executeMethod(httpget); > InputStream instream = httpget.getResponseBodyAsStream(); > int l; > byte[] buffer = new byte[1024]; > long start = System.currentTimeMillis(); > while ((l = instream.read(buffer)) != -1) { > long time = System.currentTimeMillis() - start; > if (time > TOTAL_TIMEOUT) { > throw new OppsieException(); > } > // do stuff > } > } finally { > httpget.releaseConnection(); > } > > The worst case is TOTAL_TIMEOUT - 1 + SOCKET_TIMEOUT > > Hope this helps > > Oleg > > > > > > Oleg Kalnichevski <[EMAIL PROTECTED]> wrote: > > On Thu, Nov 03, 2005 at 02:01:14PM -0800, Guy With Question wrote: > > > Thanks for the clarification. > > > > > > So I guess when I am setting connection timeout = 10, what I'm really > doing is setting timeout for the Connection Socket. > > > > > > What I want to do is set timeout for the data Socket as well. If I don't > have the complete response within a time period, say 8 seconds (assuming > connection timeout is 2 seconds), then I want my client to stop blocking. > > > > > > > Not quite. If you set the socket timeout to, say, 10 sec, and there's > > a packet coming every 9 secs, the connection will never time out. The > > socket timeout only ensures that if there's no data coming FOR 10 sec, > > the socket will stop blocking. > > > > Hope this helps > > > > Oleg > > PS: in the future please post your questions to the mailing list > > > > > > > Regards. > > > > > > > > > > > > > > > > > > On Thu, 2005-11-03 at 11:47 -0800, Guy With Question wrote: > > > > Hello, > > > > > > > > Background: > > > > I am using HttpClient 3.0 rc4. I am trying to connect to an IIS > > > > server using SSL. I need to POST data to that server. My > > > > connection timeout is set to 10 seconds. When execute method runs, > > > > the first response I get is 100 Continue which is almost > > > > immediate, but the HTTP content comes back much after 10 seconds. > > > > > > > > Question: > > > > I am not sure if HttpClient is using a second connection in the > > > > execute method for sending the actual POST data. > > > > > > HttpClient does not use a second connection to execute POST requests > > > > > > > 1. If the client uses the same connection to POST data, then will > > > > the timeout value NOT matter anymore since the client has already > > > > recieved 100 Continue immediately? > > > > > > The socket timeout defines the maximum period of inactivity between > > > two consecutive incoming IP packets, or in other words the maximum > > > period of time the socket can be blocked in a read operation > > > > > > The connection timeout defines how long the socket can be blocked > > > waiting until the socket is ready to send and receive data. It has > > > no effect on read / write operations > > > > > > > 2. If it uses another connection, then will that connection also > > > > have a connection timeout of 10 seconds. If yes, then why is it > > > > taking longer than 10 seconds to get my response? > > > > > > See above > > > > > > > 3. If I want to set the connection timeout = 10 seconds from the > > > > time the first request is made to the time I get a final response, > > > > what do I have to do? > > > > > > It all depends what you mean by the connection timeout. The maximum > > > time until the response is received in its entirety? > > > > > > Hope this helps > > > > > > Oleg > > > > > > > > > > > Code: > > > > > > > > HttpClient httpClient = new HttpClient(new > > > > SimpleHttpConnectionManager()); > > > > > > > > Integer timeout = new Integer(10*1000); > > > > > > > > > > > > > > > > httpClient.getHttpConnectionManager().getParams().setParameter("ht > > > > tp.connection.timeout", > > > > timeout); > > > > > > > > httpPostMethod.setRequestBody(data); > > > > > > > > int statusCode = httpClient.executeMethod(httpPostMethod); > > > > > > > > > > > > > > > > Thanks in advance! > > > > > > > > > > > > > > > --------------------------------- > > > Yahoo! FareChase - Search multiple travel sites in one click. > > > > > > --------------------------------- > > Yahoo! FareChase - Search multiple travel sites in one click. > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
