On clicking a hyperlink or submitting a form, 'Referer' HTTP header should be sent.
To test it, you have to use pages hosted in web container. Second page prints 'null' using HtmlUnit, and prints 'page1.jsp' URL using browser.
link1.jsp
<head>
link2.jsp
<head>
Code:
String url = "http://server/webapp/link1.jsp"; WebClient client = new WebClient(); CollectingAlertHandler collectingAlertHandler = new CollectingAlertHandler(); client.setAlertHandler( collectingAlertHandler ); HtmlPage page1 = (HtmlPage)client.getPage( url ); HtmlPage page2 = (HtmlPage)page1.getAnchorByHref("link2.jsp" ).click();
Logged In: YES
user_id=950730
Originator: YES
Attached is a patch for HtmlAnchor, and HtmlForm
To test the difference, you need a web container:
link1.jsp
<head>
<form method="post" action="link2.jsp" name="myForm">
<input type="submit" value="Second Page" name="hello">
</form>
<%System.out.println("link1.jsp: " + request.getHeader( "referer" ) );%>
link2.jsp
<head>
Third Page
<%System.out.println("link2.jsp: " + request.getHeader( "referer" ) );%>
link3.jsp
<head>
<%System.out.println("link3.jsp: " + request.getHeader( "referer" ) );%>
Code:
String url = "http://hostname/webapp/link1.jsp";
WebClient client = new WebClient();
CollectingAlertHandler collectingAlertHandler = new CollectingAlertHandler();
client.setAlertHandler( collectingAlertHandler );
HtmlPage page1 = (HtmlPage)client.getPage( url );
HtmlPage page2 = (HtmlPage)page1.getFormByName( "myForm" ).getInputByName( "hello" ).click();
HtmlPage page3 = (HtmlPage)page2.getAnchorByHref("link3.jsp" ) .click();
File Added: refererHeader.patch
Logged In: YES
user_id=402164
Originator: NO
The current way to test such things in htmlunit unit tests is to use a MockConnection and to ask it about the header used to perform the last request.
What about following cases:
- frameset: I guess that frames should be requested with the frameset as referer
- window.open: if I correctly remember, FF sets the page where the script loads as referer whereas IE doesn't set any referer
Logged In: YES
user_id=950730
Originator: YES
You are absolutely right regarding frameset and window.open.
Attached is the patch.
Logged In: YES
user_id=950730
Originator: YES
File Added: refererHeader.patch
Logged In: YES
user_id=402164
Originator: NO
nearly perfect but I still have one question: what does HtmlPage.getOriginatingUrl() bring compared to HtmlPage.getWebResponse().getUrl()?
Patch
Logged In: YES
user_id=950730
Originator: YES
Nothing, sorry I didn't know about that.
Please find attached.
File Added: refererHeader.patch
Logged In: YES
user_id=402164
Originator: NO
Patch applied. Thanks.
I've simplified a bit the change in WebClient and added some "final" keywords.