Hello,
I've to submit post form with username,password and 2 hidden parameters.
It seems to be logged in, but then redirection fails:
import java.io.IOException;
import org.apache.commons.httpclient.*;import
org.apache.commons.httpclient.cookie.CookiePolicy;import
org.apache.commons.httpclient.cookie.CookieSpec;import
org.apache.commons.httpclient.methods.*;
public class FormLogin{ static final String LOGON_SITE = "www.website.org";
static final int LOGON_PORT = 80;
public FormLogin() { super(); }
public static void main(String[] args) throws Exception {
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT, "http");
client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); //
'developer.java.sun.com' has cookie compliance problems // Their session
cookie's domain attribute is in violation of the RFC2109 // We have to
resort to using compatibility cookie policy
GetMethod authget = new GetMethod("/servlet/SessionServlet");
client.executeMethod(authget); System.out.println("Login form
get: " + authget.getStatusLine().toString()); // release any connection
resources used by the method authget.releaseConnection(); // See
if we got any cookies CookieSpec cookiespec =
CookiePolicy.getDefaultSpec(); Cookie[] initcookies = cookiespec.match(
LOGON_SITE, LOGON_PORT, "/", false, client.getState().getCookies());
System.out.println("Initial set of cookies:"); if
(initcookies.length == 0) { System.out.println("None"); }
else { for (int i = 0; i < initcookies.length; i++) {
System.out.println("- " + initcookies[i].toString()); } }
PostMethod authpost = new PostMethod("/"); // Prepare
login parameters NameValuePair action = new NameValuePair("submit",
"entra!"); NameValuePair url = new NameValuePair("statuslg", "ok");
NameValuePair userid = new NameValuePair("usr", "user");
NameValuePair password = new NameValuePair("pwd", "password");
authpost.setRequestBody( new NameValuePair[] {action, url, userid,
password}); client.executeMethod(authpost);
System.out.println("Login form post: " + authpost.getStatusLine().toString());
// release any connection resources used by the method
authpost.releaseConnection(); // See if we got any cookies // The
only way of telling whether logon succeeded is // by finding a session
cookie Cookie[] logoncookies = cookiespec.match( LOGON_SITE,
LOGON_PORT, "/", false, client.getState().getCookies());
System.out.println("Logon cookies:"); if (logoncookies.length == 0)
{ System.out.println("None"); } else { for
(int i = 0; i < logoncookies.length; i++) {
System.out.println("- " + logoncookies[i].toString()); }
} // Usually a successful form-based login results in a redicrect to
// another url int statuscode = authpost.getStatusCode(); if
((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) || (statuscode ==
HttpStatus.SC_MOVED_PERMANENTLY) || (statuscode ==
HttpStatus.SC_SEE_OTHER) || (statuscode ==
HttpStatus.SC_TEMPORARY_REDIRECT)) {
//authpost.setFollowRedirects(true); Header header =
authpost.getResponseHeader("location"); if (header != null) {
String newuri = header.getValue(); if ((newuri == null)
|| (newuri.equals(""))) { newuri = "/"; }
System.out.println("Redirect target: " + newuri);
GetMethod redirect = new GetMethod(newuri);
redirect.setRequestHeader("Cookie",logoncookies.toString());
client.executeMethod(redirect); byte[] responseBody =
redirect.getResponseBody(); System.out.println("Redirect: " +
redirect.getStatusLine().toString());
System.out.println("Redirect: " + redirect.getRequestHeader("path"));
// release any connection resources used by the method
redirect.releaseConnection(); } else {
System.out.println("Invalid redirect"); System.exit(1);
} } }
I obtain code 302 for login page,
andauthpost.getResponseHeader("location")=/default.php (that's correct)but
redirection doesn't work and variable responseBody contains html code from
login page (index.php)Any idea, please?
_________________________________________________________________
Scarica GRATIS la versione personalizzata MSN di Internet Explorer 7!
http://optimizedie7.msn.com/default.aspx?mkt=it-it