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]