[
https://issues.apache.org/jira/browse/HTTPCLIENT-1267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13509675#comment-13509675
]
Francois-Xavier Bonnet commented on HTTPCLIENT-1267:
----------------------------------------------------
Karl,
I debugged your code and I think I found the problem. When you retrieve the
cookies from the first request, HttpClient gives you a BasicClientCookie, then
you store it in the database but for the field "discard" you do this:
map.put(discardField,booleanToString(!c.isPersistent()));
As your cookie is not persistent, you get discard=true
Then when you restore your cookie from database, you create a
BasicClientCookie2 and if you look at the code of BasicCookieStore:
public synchronized void addCookie(Cookie cookie) {
if (cookie != null) {
// first remove any old cookie that is equivalent
cookies.remove(cookie);
if (!cookie.isExpired(new Date())) {
cookies.add(cookie);
}
}
}
And then the code of BasicClientCookie2:
public boolean isExpired(final Date date) {
return this.discard || super.isExpired(date);
}
So you cookie is not even added to the store as it is considered as expired.
> There seems to be no way to get HttpClient to include cookies from a custom
> store
> ---------------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1267
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1267
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpCookie
> Affects Versions: 4.2.2
> Reporter: Karl Wright
>
> In the port of ManifoldCF from commons-httpclient to httpcomponents, we
> discovered a problem or maybe a design flaw with how cookies are handled.
> What we're trying to do is to follow a certain series of html pages, and
> record the cookies after that is done, and use exactly those cookies for a
> subsequent series of pages. So I have code that looks something like this:
> {code}
> DefaultHttpClient httpClient = new DefaultHttpClient();
> ...
> CookieStore cs = new BasicCookieStore();
> cs.addCookie(...); // for each saved cookie
> httpClient.setCookieStore(cs);
> HttpGet httpget = new HttpGet(...);
> HttpResponse response = httpClient.execute(httpget);
> Cookie[] cookiesToSave = httpClient.getCookieStore().getCookies();
> [save the cookies aside]
> {code}
> What happens when I do this against a page that sets a cookie, is I get a
> perfectly reasonable cookie, and save it. For the next page, the code to add
> the cookie to the custom store then seems to work fine as well. But when I
> watch what is transmitted for the request (via header logging) I see no
> Cookie header being sent, and indeed the cookie seems to be lost.
> Similar logic was done with HttpState in commons-httpclient, and worked
> perfectly there against the same website.
> I have not yet tried the HttpContext approach for implementing this - I may
> try that while awaiting an answer to this ticket, but the above seems like it
> ought to work, according to the documentation.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]