LogIn auf HP per POST/GET und weiter ohne Redirects

tommey

Grünschnabel
Hey, ich versuche mich per Apache Http Client und POST/GET auf eine Seite einzu loggen:
https://stisys.informatik.haw-hamburg.de/stisys/
HTML:
<html>
    <head>
        <title>StudierendenInformationSystem (StISys) - Login</title>
        
        <link href="css/fh.css" rel="stylesheet" type="text/css">
<link rel="shortcut icon" href="images/favicon.ico">
<script type="text/javascript" language="JavaScript" src="js/swl-app-base.js"></script>
 
        
        
        <script language="JavaScript">
    
              function login() {        
    
                    document.loginF.submit();
             }
        </script>
    
    </head>
    
    
<body bgcolor="white">
 
 
 
<h1>StISys (Studierenden Informations System)</h1> 
 
 
<table cellspacing="5" cellpadding="0">
<tr>
<td>
 <table cellspacing="0" cellpadding="0">
    <tr align="top" width="640">
            <td>
                <table cellspacing="0" cellpadding="0" width="605"><tr><td>Melden Sie sich an um Einstellungen an Ihrem Account vorzunehmen, ihr Passwort zu &auml;ndern, Ergebnisse Ihrer Klausuren einzusehen oder Veranstaltungen im n&auml;chsten Semester zu buchen.</td></tr></table>  
            </td>
    </tr>
  </table> 
</td>
<td>
 
 
</td>
</tr>
</table> 
 
 
 
 
<form name="loginF" method="post" action="/stisys/login.do;jsessionid=3B1A5FC34B1CC50CDE44897A72A5193E">
<table cellspacing="5" cellpadding="0">
<tr>
<td>
    <table cellspacing="0" cellpadding="0">
        <tr valign="top" width="640">
            <td>
                <table width="298" cellspacing="0" cellpadding="0" class="tableframe">
                    <tr>
                        <td>&nbsp;&nbsp;Login</td>
                    </tr> 
                </table>
                
                <table width="298" cellspacing="0" cellpadding="0" class="tablecontent">
                  
                    
                     
                    
                  
                  <tr>
                    <td align="left">Username</td>
                    <td align="right"><input type="text" name="username" class="input_text"></td>
                  </tr>
                  <tr>
                  <td colspan="2"></td>
                  </tr>
                  
                   
                  <tr> <td width="1" align="right"  ><img src="images/sizer.gif" alt="" width="1" height="1" border="0" > </td> </tr>
                  
                  <tr>
                    <td align="left">Passwort</td>
                    <td align="right"><input id="password" type="password" name="password" class="input_text" onkeydown="javascript:if (event.keyCode == 13) login();"></td>
                  </tr>
                  <tr>
                  <td colspan="2"></td>
                  </tr>
 
                   
                  <tr> <td width="1" align="right"  ><img src="images/sizer.gif" alt="" width="1" height="1" border="0" > </td> </tr>                 
                  
                  <tr>
                    <td></td>
                    <td align="right">
        
                            <!--input type="image" src="images/button_login_de.gif"-->
                            
                            <div class="button button_right button_active" >
                                <div class="button_a_left" >&nbsp;</div>
                                    <div class="button_a_center">
                                        <a id="login_link" href="javascript:login();" class="button_link">Login</a>
                                    </div>
                                <div class="button_a_right"/>&nbsp;</div>
                            </div>
 
                    </td>
                  </tr>
                </table>
</td><td>
 
 
</td>
</tr>
</table>
</form>
 
<br>
 
 <table width="605" cellspacing="0" cellpadding="0" class="tableframe">
<tr>
<td>&nbsp &Uuml;bersicht der n&auml;chsten Anmelde Termine f&uuml;r das aktuelle Semester (2011SS)</td>
</tr>
</table>
<table width="605" cellspacing="0" cellpadding="0" class="tablecontent">
<td>
 
<left><table cellspacing="0" cellpadding="0" width="595">
<tr>
<td width="58%">Typ</td>
<td width="1%">&nbsp;</td>
<td width="20%">von</td>
<td width="1%">&nbsp;</td>
<td width="20%">bis</td>
</tr>
<tr class="tablecontentbackdark">
<td>Praktika mit Gruppeneinteilung</td>
<td>&nbsp;</td>
<td>19.09.2011 08:00</td>
<td>&nbsp;</td>
<td>25.09.2011 23:59</td>
</tr>
<tr class="tablecontentbacklight">
<td>Übungen</td>
<td>&nbsp;</td>
<td>19.09.2011 07:00</td>
<td>&nbsp;</td>
<td>23.10.2011 23:59</td>
</tr>
<tr class="tablecontentbackdark">
<td>Klausuren</td>
<td>&nbsp;</td>
<td>19.09.2011 07:00</td>
<td>&nbsp;</td>
<td>15.01.2012 23:59</td>
</tr>
</table><br>
</td></table>
 
 
</table>
</center>
 
 <table cellspacing="5" cellpadding="0">
    <tr valign="top" width="640">
    
            <td>
                <table cellspacing="0" cellpadding="0">
                  <tr valign="top" width="640">
                    <td>
                       <table width="605" cellspacing="0" cellpadding="0" class="tableframe">
<tr>
<td>&nbsp Wichtige Informationen</td>
</tr>
</table>
<table width="605" cellspacing="0" cellpadding="0" class="tablecontent">
<td>
 
<left><table cellspacing="0" cellpadding="0" width="595">
<tr>
<td class="thinline"><img src="images/sizer.gif" alt="" width="1" height="1" border="0"></td>
<td><b>StISys funktioniert mit Firefox, Seamonkey und Google Chrome</b></td>
<td>&nbsp;</td></tr>
<tr>
<td><br></td>
</tr>
<tr>
<td class="thinline"><img src="images/sizer.gif" alt="" width="1" height="1" border="0"></td>
<td><b>Bitte kontrollieren Sie immer alle Anmeldungen!</b></td>
<td>&nbsp;</td></tr>
<tr>
<td><br></td>
</tr>
<tr>
<td class="thinline"><img src="images/sizer.gif" alt="" width="1" height="1" border="0"></td>
<td>Für die Nutzung der Labore gilt die Benutzerordnung für die Datenverarbeitungsanlagen der Fachhochschule Hamburg (DV-BO) vom 12. Mai 2011:&nbsp; <a target="_blanc" href="http://www.informatik.haw-hamburg.de/fileadmin/DataStore/StISys/IV-Benutzerordnung2011.pdf">      
bo-dv.pdf</a></td>
<td>&nbsp;</td></tr>
<tr>
<td><br></td>
</tr>
<tr>
<td class="thinline"><img src="images/sizer.gif" alt="" width="1" height="1" border="0"></td>
<td>Wenden Sie sich bei Fehlern oder Problemen an:<br><br>
&nbsp;&nbsp;&nbsp;&nbsp; Silke.Behn(at)informatik.haw-hamburg.de<br>
&nbsp;&nbsp;&nbsp;&nbsp; Michael.Brodersen(at)haw-hamburg.de</td>
<td>&nbsp;</td></tr>
<tr>
<td><br></td>
</tr>
</table>
</td></table>
                
                    </td>
                  </tr>
                </table>
            </td>       
<!--    
            <td>
                <table width="595" cellspacing="0" cellpadding="0" class="tableframe">
                    <tr>
                        <td>&nbsp;&nbsp;Hilfe</td>
                    </tr> 
                </table>
                                
                <table width="595" cellspacing="0" cellpadding="0" class="tablecontent">
                  
                  <tr>
                    <td align="left">Hilfe<br>
                    <br>
                    <li> Email Silke </li>
                    <li> Email Michael </li>
                   
                    <br>
                    
                    </td>
                  </tr>
                  
                  <tr>
                  </tr>
 
                  <tr><td>&nbsp;</td></tr>
                  <tr>
                    <td align="left"><li>Tip: Um immer wiederkehrende Zertifikatsabfragen zu vermeiden, installieren Sie bitte das <a href="http://www.informatik.haw-hamburg.de/uploads/media/informatik-ca.crt">SWL-Zertifikat</a>.</li></td>
                  </tr>
                   
                  <tr><td>&nbsp;</td></tr>
                  
                  <tr>
                    <td align="left"><li>Tip: Am besten funktioniert diese Seite mit Mozilla basierten Browsern (Firefox, Mozilla, etc.).</li></td>
                  </tr>
-->               
                </table>
                
            </td>
            
     </tr>
  </table>
 
</td>
 
<td width="10"></td>
<td valign="top">
 
</td>
</tr>
</table>
<span style="color:white;">$Name: V4_1_36 $</span> 
</body>
</html>

Leider komme ich nicht weiter, ich hatte vorher einfach per POST die logindaten gesendet und konnte mich über mein programm problemlos einloggen. Dann über Redirects direkt auf meine Notenseite kommen. Jetzt hat die Uni "redirects disabled" und mit "followRedirects(true);" funktioniert es nicht.
Hat jemand eine Idee? Muss ich zum Beispiel den LoginButton irgendwie virtuell drücken?
Wenn ja wie geht das? Danke schon einmal
Oder müsste es mit followRedirects(true) auf jeden Fall gehen?
 
Hi tommey,

Erstmal willkommen hier im Forum.

1. Willst du den HTTP-Post-Header per Java-Socket schicken?
- Denn hilft dir villeicht der Abschnitt 21.4.3 POST-Request absenden bei Java ist auch eine Insel
und der Wikipedia-Eintrag zu HTTP-Post

2. Dein fast funktionierender Quellcode würde uns wohl mehr helfen als die eh verlinkte Seite die du ansprechen willst.

Gruß javaDeveloper2011
 
Danke für die schnelle Antwort :)

Code:
public class Updater{

	private static String url = "https://stisys.informatik.haw-hamburg.de/stisys/";
	private static ArrayList<Exam> endlich = new ArrayList<Exam>();
		
	public static boolean login(String username, String password){
		
		try{
		HttpClient client = new HttpClient();
		GetMethod getMethod1 = new GetMethod(url);
		getMethod1.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
				new DefaultHttpMethodRetryHandler(3, false));
		
		client.executeMethod(getMethod1);
		org.apache.commons.httpclient.Cookie[] cookies = client.getState().getCookies();
		 for (int i = 0; i < cookies.length; i++) {
		        org.apache.commons.httpclient.Cookie cookie = cookies[i];
		        System.err.println(
		          "Cookie: " + cookie.getName() +
		          ", Value: " + cookie.getValue() +
		          ", IsPersistent?: " + cookie.isPersistent() +
		          ", Expiry Date: " + cookie.getExpiryDate() +
		          ", Comment: " + cookie.getComment());

		        cookie.setValue("My own value");
		      }
		 HttpState initialState = new HttpState();
		 initialState.addCookie(cookies[0]);
		 client.setState(initialState);
		 
                                          PostMethod postMethod1 = new PostMethod(url);
			postMethod1.getParams().setCookiePolicy(
					CookiePolicy.BROWSER_COMPATIBILITY);
			postMethod1.addParameter("username", username);
			postMethod1.addParameter("password", password);
			client.executeMethod(postMethod1);

	               GetMethod getMethod2 = new GetMethod(url+ "login.do");
			client.executeMethod(getMethod2);
			String responseBodyErgebnisse = getMethod2
					.getResponseBodyAsString();	 
	
		}
		catch (Exception e) {
			return false;
		}
		
		return true;
	}

Ich ba im Studium leider keine Java Netzwerk/Internet Porgrammierung behandelt, deshlab kann es sein, dass der Code nicht dem CodingStyle entspricht oder gar unsinnig ist:rolleyes:, aber ich bin für jeden Hinweis dankbar ;)

Was ich weiß ist, das GET Daten vom Server holt und POST welche sendet. Ich dachte jetzt, dass ich erst mit GET den Cookie hole, in der die Session ID steht und den Cookie meinem Client hinzufüge. Geh ich richtig in der Annahme, dass anschließend bei jedem GET/POST die Cookie information mit übertragen werden? Weil der Server doch die SessionID will oder?

Dann sende ich per POST meine LogIn-Daten, wo ich jetzt aber festhänge. An welche Seite muss ich den POST senden? An https://stisys.informatik.haw-hamburg.de/stisys/ oder https://stisys.informatik.haw-hamburg.de/stisys/login.do? Zweiteres wär ja ein redirect oder? Der ist widerum vom Server disabled.

Sonst hab ich einfach per GET und Redirect-Funktion mir die Daten aus der jeweiligen Seite geholt .

Über Hilfe und Hinweise bin ich wirklich dankbar, ich muss mich da echt erst reinfuchsen!

Mit dem funktionierenden Quellcode ist das so ne sache, da ich schon seit dem Umstellen des Servers auf Redirects disabled schon einiges versucht hab. Ich guck mal ob ich noch die funktionierende Version finde.

Hier die funktionierende Version denk ich, ich kanns leider nicht ausprobieren weil die Firewall hier auf Arbeit mich nicht rauslässt.
Code:
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.JOptionPane;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.httpclient.HttpClient;

public class Updater{

	private static String url = "https://stisys.informatik.haw-hamburg.de/stisys/";
	private static ArrayList<Exam> endlich = new ArrayList<Exam>();
		
	public static boolean login(String username, String password){
		
		try{
		HttpClient client = new HttpClient();
		GetMethod getMethod1 = new GetMethod(url);
		getMethod1.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
				new DefaultHttpMethodRetryHandler(3, false));
		client.executeMethod(getMethod1);
		String responseBodyWithoutLogin = getMethod1
				.getResponseBodyAsString();
		String sessionID = responseBodyWithoutLogin.substring(
				responseBodyWithoutLogin.indexOf("login.do;jsessionid="),
				responseBodyWithoutLogin.indexOf(">",
						responseBodyWithoutLogin
								.indexOf("/stisys/login.do;jsessionid=")));

		PostMethod postMethod1 = new PostMethod(url
				+ sessionID.substring(0, sessionID.length() - 1));
		postMethod1.getParams().setCookiePolicy(
				CookiePolicy.BROWSER_COMPATIBILITY);
		postMethod1.addParameter("username", username);
		postMethod1.addParameter("password", password);
		client.executeMethod(postMethod1);
		client.executeMethod(getMethod1);
		}
		catch (Exception e) {
			return false;
		}
		
		return true;
	}
 
Zuletzt bearbeitet:
Hi,

also POST holt auch (wie GET) eine Datei vom Server und sendet außerdem Name-Wert-Paare.
Ein klick auf den Button führt - wenn auch etwas umständlich - zum submit eines "form".
Wenn du das "form" im Code von Post #1 betrachtest,
HTML:
<form name="loginF" method="post" action="/stisys/login.do">
siehst du:
"action = /stisys/login.do"
=> 1. Zeile des HTTP-Headers fängt mit
POST /stisys/login.do an.

Wie heißen aber nun die namen der Name-Wert-Pare?
HTML:
<input type="text" name="username" class="input_text">
1. username
HTML:
<input id="password" type="password" name="password" class="input_text" onkeydown="javascript:if (event.keyCode == 13) login();">
2. passwort

Am Ende des HTTP-Headers kehme dann nach einer Leerzeile z.B.:
Code:
username=Max&password=SeinGeheimniss

Ansonste wess ich auch nicht weiter, mit org.apache.commons.httpclient hab ich leider nich nie gearbeitet.

javaDeveloper2011
 
Ok ich muss also das HTML Formular ausfüllen bzw per POST die Formular Werte an den Server senden.
Gehört denn außer username und passwort noch etwas anderes zum Formular? Wie zb der LogIn Button?

Wenn alle daten des HTML Formulars vollständig sind, wird dann das JavaScript automatisch ausgeführt?

Hättest du noch ne andere Idee wie es ohne Apache geht? vielleicht mit URLConnection?


Oder muss ich die Parameter Username und Password an https://stisys.informatik.haw-hamburg.de/stisys/login.do senden? Aerb dann wäre wieder der Mist mit dem Redirect disabed.
 
Zuletzt bearbeitet:
Der Button bewirkt nur das senden, enthält ja aber selbst keine Informationen.
Ich denke JavaScript muss gar nicht mehr ausgeführt werden.?
URLConnection kännte gehen, wie das mit Sessions und Redirect ist, weiss ich nicht, villeicht stehts bei den 2 Links aus meinem ersten Post.
 

Neue Beiträge

Zurück