public class CookieModule extends java.lang.Object implements HTTPClientModule
The accepting and sending of cookies is controlled by a CookiePolicyHandler. This allows you to fine tune your privacy preferences. A cookie is only added to the cookie list if the handler allows it, and a cookie from the cookie list is only sent if the handler allows it.
This module expects to be the only one handling cookies. Specifically, it
will remove any Cookie and Cookie2 header fields found
in the request, and it will remove the Set-Cookie and
Set-Cookie2 header fields in the response (after processing them).
In order to add cookies to a request or to prevent cookies from being sent,
you can use the addCookie
and removeCookie
methods to manipulate the
module's list of cookies.
A cookie jar can be used to store cookies between sessions. This file is read when this class is loaded and is written when the application exits; only cookies from the default context are saved. The name of the file is controlled by the system property HTTPClient.cookies.jar and defaults to a system dependent name. The reading and saving of cookies is enabled by setting the system property HTTPClient.cookies.save to true.
REQ_CONTINUE, REQ_NEWCON_RST, REQ_NEWCON_SND, REQ_RESPONSE, REQ_RESTART, REQ_RETURN, REQ_SHORTCIRC, RSP_CONTINUE, RSP_NEWCON_REQ, RSP_NEWCON_SND, RSP_REQUEST, RSP_RESTART, RSP_SEND, RSP_SHORTCIRC
Modifier and Type | Method and Description |
---|---|
static void |
addCookie(Cookie cookie)
Add the specified cookie to the list of cookies in the default context.
|
static void |
addCookie(Cookie cookie,
java.lang.Object context)
Add the specified cookie to the list of cookies for the specified
context.
|
static void |
discardAllCookies()
Discard all cookies for all contexts.
|
static void |
discardAllCookies(java.lang.Object context)
Discard all cookies for the given context.
|
static Cookie[] |
listAllCookies()
List all stored cookies for all contexts.
|
static Cookie[] |
listAllCookies(java.lang.Object context)
List all stored cookies for a given context.
|
static void |
removeCookie(Cookie cookie)
Remove the specified cookie from the list of cookies in the default
context.
|
static void |
removeCookie(Cookie cookie,
java.lang.Object context)
Remove the specified cookie from the list of cookies for the specified
context.
|
int |
requestHandler(Request req,
Response[] resp)
Invoked by the HTTPClient.
|
void |
responsePhase1Handler(Response resp,
RoRequest req)
Invoked by the HTTPClient.
|
int |
responsePhase2Handler(Response resp,
Request req)
Invoked by the HTTPClient.
|
void |
responsePhase3Handler(Response resp,
RoRequest req)
Invoked by the HTTPClient.
|
static CookiePolicyHandler |
setCookiePolicyHandler(CookiePolicyHandler handler)
Sets a new cookie policy handler.
|
void |
trailerHandler(Response resp,
RoRequest req)
Invoked by the HTTPClient.
|
public int requestHandler(Request req, Response[] resp)
requestHandler
in interface HTTPClientModule
req
- the request - may be modified as neededresp
- the response if the status is REQ_RESPONSE or REQ_RETURNpublic void responsePhase1Handler(Response resp, RoRequest req) throws java.io.IOException
responsePhase1Handler
in interface HTTPClientModule
resp
- the response - may be modifiedreq
- the original requestjava.io.IOException
- if an IOException occurs on the socketpublic int responsePhase2Handler(Response resp, Request req)
responsePhase2Handler
in interface HTTPClientModule
resp
- the response - may be modifiedreq
- the request; if the status is RSP_REQUEST then this
must contain the new request; however do not modify
this if you don't return a RSP_REQUEST status.public void responsePhase3Handler(Response resp, RoRequest req)
responsePhase3Handler
in interface HTTPClientModule
resp
- the response - may be modifiedreq
- the original requestpublic void trailerHandler(Response resp, RoRequest req) throws java.io.IOException
trailerHandler
in interface HTTPClientModule
resp
- the responsereq
- the requestjava.io.IOException
- if an IOException occurs on the socketpublic static void discardAllCookies()
public static void discardAllCookies(java.lang.Object context)
context
- the context Objectpublic static Cookie[] listAllCookies()
public static Cookie[] listAllCookies(java.lang.Object context)
context
- the context Object.public static void addCookie(Cookie cookie)
cookie
- the Cookie to addpublic static void addCookie(Cookie cookie, java.lang.Object context)
cookie
- the cookie to addcontext
- the context Object.public static void removeCookie(Cookie cookie)
cookie
- the Cookie to removepublic static void removeCookie(Cookie cookie, java.lang.Object context)
cookie
- the cookie to removecontext
- the context Objectpublic static CookiePolicyHandler setCookiePolicyHandler(CookiePolicyHandler handler)
CookieModule.setCookiePolicyHandler(null);
.
At initialization time a default handler is installed. This handler allows all cookies to be sent. For any cookie that a server wishes to be set two lists are consulted. If the server matches any host or domain in the reject list then the cookie is rejected; if the server matches any host or domain in the accept list then the cookie is accepted (in that order). If no host or domain match is found in either of these two lists and user interaction is allowed then a dialog box is poped up to ask the user whether to accept or reject the cookie; if user interaction is not allowed the cookie is accepted.
The accept and reject lists in the default handler are initialized at startup from the two properties HTTPClient.cookies.hosts.accept and HTTPClient.cookies.hosts.reject. These properties must contain a "|" separated list of host and domain names. All names beginning with a "." are treated as domain names, all others as host names. An empty string will match all hosts. The two lists are further expanded if the user chooses one of the "Accept All from Domain" or "Reject All from Domain" buttons in the dialog box.
Note: the default handler does not implement the rules concerning
unverifiable transactions (section 3.3.6, RFC-2965). The reason
for this is simple: the default handler knows nothing about the
application using this client, and it therefore does not have enough
information to determine when a request is verifiable and when not. You
are therefore encouraged to provide your own handler which implements
section 3.3.6 (use the CookiePolicyHandler.sendCookie
method for this).
handler
- the new policy handler