[
https://issues.apache.org/jira/browse/HTTPCLIENT-1267?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13509766#comment-13509766
]
Karl Wright commented on HTTPCLIENT-1267:
-----------------------------------------
Hi Oleg,
I am sorry if you got the impression that I was blaming you in any way for the
way cookies work in general. All I'm trying to do is explain what we'd hoped
to do in our project, and how we have done it in the past. How we do it in the
future is open to negotiation, although it would be good I think to make sure
we understand one another first. So let's first go into where I think things
stand.
I understand that there are lots of different forms of cookies. I understand
also that in order to pull information out of the cookie one needs to know what
form it is. I also know that the allowable forms are determined by the kind of
header used to set the cookie, e.g. Set-Cookie or Set-Cookie2. However, as far
as ManifoldCF is concerned, none of that is actually important. All that
ManifoldCF wants to do is record the cookie (in its original header form), and
retransmit it later (using the right header and in its original form).
Unfortunately, commons-httpclient did not permit this, because there was no way
to get the header form back out of a cookie. So we created a database schema
that included all the fields that commons-httpclient seemed to support, and
picked the cookie apart and put it back together for transmission to the
server. However, I stress again that all of that is unnecessary from
ManifoldCF's perspective; all we ever wanted to do was save the cookie in its
unaltered header form in the database.
For httpcomponents httpclient, there are two options for ManifoldCF. One
option is to keep trying to do what we have done in the past, and break the
cookie up. If that approach is to work, we need to understand how to properly
disassemble the cookie using httpcomponents httpclient constructs, and
reassemble it. Currently I clearly don't understand how to do that reliably.
The second option is to figure out how to get the header form of the cookie,
which is what we wanted to do in the first place, and also how to restore a
Cookie object from its header form. It sounds, however, like that may still
not be an option in httpcomponents at this time. Another option, which you've
suggested, is to use Java serialization - however, in my experience, serialized
objects are not a good thing to be putting into a persistent database, because
new versions of software will come along and make those objects not deserialize
in a reasonable manner. So I don't think we can use that approach.
I am open to your suggestions as to how best to proceed.
> 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]