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

Reply via email to