Some more strange behaviour.

Sometimes when I step this code, it sends the second header even when
pausing for only 1 second (literally only a breakpoint, refresh,
alt+tab to eclipse, press continue button).

I can't really place why it's running through a new request. It's
definitely not my code, as placing a breakpoint at:
HttpResponse response = httpClient.execute(request, context);

Only pauses it once, even when pausing twice in the cookie method. My
only idea is that it has something to do with the retries of
connections. Though I discovered this problem with intermittent
failures of my requests. Seems like it sometimes happens even with
millisecond gaps in between.

Any ideas?

Quintin

On 7/7/08, Quintin Beukes <[EMAIL PROTECTED]> wrote:
> Hey,
>
>  I found the problem I had, cookies received through the Servlet
>  doesn't have a domain set (because the cookie request header doesn't
>  send it iirc). Either way, I am sending an appropriate domain for each
>  request now.
>
>  But this caused me to run into a possible bug in both HttpClient and
>  PHP (oops). Well, the HttpClient one can possible be justified, though
>  I'm not really sure, so I'll check with you. The request/response I'm
>  getting is this:
>
>  GET /basket.php HTTP/1.1
>  Host: junkmail.dev.junkmail.co.za
>  Connection: Keep-Alive
>  Cookie: JSESSIONID=391E339150BC34CE0BC73696914EE561;
>  JMT_SID=1215430789544.7596784026398062592.391E339150BC34CE0BC73696914EE561;
>  __utma=50980651.4049797362423985700.1215431510.1215431510.1215431510.1;
>  __utmb=50980651.2.10.1215431510; __utmc=50980651;
>  __utmz=50980651.1215431510.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);
>  JMPHPSESSID=10580e39d1dd79e077340e93169330b6
>  Cookie2: $Version=1
>  Cookie: JSESSIONID=391E339150BC34CE0BC73696914EE561;
>  JMT_SID=1215430789544.7596784026398062592.391E339150BC34CE0BC73696914EE561;
>  __utma=50980651.4049797362423985700.1215431510.1215431510.1215431510.1;
>  __utmb=50980651.2.10.1215431510; __utmc=50980651;
>  __utmz=50980651.1215431510.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);
>  JMPHPSESSID=10580e39d1dd79e077340e93169330b6
>  Cookie2: $Version=1
>
>  HTTP/1.1 200 OK
>  Date: Mon, 07 Jul 2008 11:54:04 GMT
>  Server: Apache
>  X-Powered-By: PHP/5.2.4_p20070914-pl2-gentoo
>  Set-Cookie: JMPHPSESSID=a1ae0f6136f6f99e7fcc7542dc517cbd; path=/;
>  domain=junkmail.dev.junkmail.co.za
>  Expires: Thu, 19 Nov 1981 08:52:00 GMT
>  Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
>  Pragma: no-cache
>  Content-Length: 610
>  Keep-Alive: timeout=15, max=100
>  Connection: Keep-Alive
>  Content-Type: text/html
>
>  Cookies: Array
>  (
>     [JSESSIONID] => 391E339150BC34CE0BC73696914EE561
>     [JMT_SID] =>
>  1215430789544.7596784026398062592.391E339150BC34CE0BC73696914EE561
>     [__utma] => 
> 50980651.4049797362423985700.1215431510.1215431510.1215431510.1
>     [__utmb] => 50980651.2.10.1215431510
>     [__utmc] => 50980651
>     [__utmz] =>
>  50980651.1215431510.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
>     [JMPHPSESSID] => 10580e39d1dd79e077340e93169330b6,
>  JSESSIONID=391E339150BC34CE0BC73696914EE561
>  )
>
>  As you can see, it's sending the cookie header TWICE. And this is
>  causing PHP to "misparse" the last cookie. I know the latter isn't
>  your problem, but this can cause applications to misbehave when
>  reached through HttpClient.
>
>  When I was stepping the HttpClient code to find my bug, I noticed that
>  HC runs into RequestAddCookies.process() twice. This is definitely the
>  reason.
>
>  On further investigation I also noticed that this only happens when I
>  am stepping the code for more than 10 seconds. So is it perhaps a
>  connection manager that gives it another try? The fact that it adds
>  ONTO the first request's headers doesn't sound good though.
>
>  Also, one more question. Does the RFC allow one to split 2 cookie
>  headers with a COMMA+SPACE? Because it seems PHP concatenates both
>  with a ", ", and then parses it from here.
>
>  Quintin
>
>
>  On 7/2/08, Quintin Beukes <[EMAIL PROTECTED]> wrote:
>  > Hey,
>  >
>  >  Due to our search engine for one of our sites being hosted on a
>  >  separate domain, we can't do AJAX requests to the original domain.
>  >  This isn't much of a problem, as I figured I'd just use HttpClient to
>  >  make a servlet which is a proxy to the Apache server.
>  >
>  >  So... to ensure session state is still maintained, which is a
>  >  requirement, I will just proxy the cookies the client sends me as
>  >  well.
>  >
>  >  I made the following method (the connection manager and parameters are
>  >  final static members of the class):
>  >
>  >   private HttpEntity proxyRequest(String baseUrl, String
>  >  getParameters, Cookie[] cookies) throws Exception
>  >   {
>  >     DefaultHttpClient httpClient = new DefaultHttpClient(connManager,
>  >  httpParams);
>  >     HttpContext context = new 
> BasicHttpContext(httpClient.getDefaultContext());
>  >     HttpGet request = new HttpGet(baseUrl + basketUri);
>  >     CookieStore cookieStore = httpClient.getCookieStore();
>  >
>  >     for (Cookie c : cookies)
>  >     {
>  >       BasicClientCookie newCookie = new BasicClientCookie(c.getName(),
>  >  c.getValue());
>  >       newCookie.setDomain(c.getDomain());
>  >       newCookie.setPath(c.getPath());
>  >       newCookie.setComment(c.getComment());
>  >       if (c.getMaxAge() > 0)
>  >       {
>  >         long expiryTime = new Date().getTime() + c.getMaxAge();
>  >         newCookie.setExpiryDate(new Date(expiryTime));
>  >       }
>  >       cookieStore.addCookie(newCookie);
>  >     }
>  >
>  >     HttpResponse response = httpClient.execute(request, context);
>  >     HttpEntity entity = response.getEntity();
>  >
>  >     if (entity == null)
>  >     {
>  >       throw new NoHttpResponseException("Basket request failed to
>  >  return a response.");
>  >     }
>  >
>  >     return entity;
>  >   }
>  >
>  >  The Cookie[] I pass in, is an array of cookies are received by
>  >  HttpServletRequest.getCookies().
>  >
>  >  I stepped the code, and the addCookie() method is definitely being
>  >  called. When recieving the response on the other side, I make a dump
>  >  of all received cookies to the output. This output is received by
>  >  HttpClient and returned to the servlet's output stream.
>  >
>  >  Then what I'm getting is a dump of "0" cookies. So the request is
>  >  successful, but the cookies added to the store is not being sent to
>  >  the client.
>  >
>  >  Can anyone see what I'm doing wrong?
>  >
>  >  --
>  >
>  > Quintin Beukes
>  >
>
>
>
> --
>
> Quintin Beukes
>


-- 
Quintin Beukes

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to