[Java] POST-Daten an Internetseite schicken

S

samotyr

Gast
Hallo Leute,

ich hoffe ihr könnt mir weiterhelfen. Seit Tagen versuche ich bereits mit Java ein kleines Tool zu schreiben, dass eine Internetseite (mit meinen Noten) parst.

Verbinden kann ich mich mittlerweile, dazu musste ich allerdings den Trustmanager überschreiben, so dass alle Zertifikate angenommen werden. Grund: meine FH nutzt ein eigenes SSL Zertifikat und ich habs nicht anders eingebunden bekommen :rolleyes:.
Aber das Verbinden geht auf jedenfall, ich kann auch die HEADER-Daten abrufen, die wie folgt aussehen:
Header: HTTP/1.1 200 OK
Header: Tue, 05 Feb 2008 17:39:52 GMT
Header: Apache/2.0.55 (Ubuntu) mod_jk/1.2.14 mod_ssl/2.0.55 OpenSSL/0.9.8a
Header: JSESSIONID=D0F6AB0221B85805F94A9502FAB89949; Path=/qisserver; Secure
Header: 6457
Header: timeout=15, max=100
Header: Keep-Alive
Header: text/html;charset=Cp1252

Url lautet: https://qis.fh-trier.de/qisserver/rds?state=user&type=0


Verbindung steht wohl somit. Ich benutze dafür die Klasse URLConnection. Der Input wird empfanden durch einen InputStreamReader, output soll gesendet werden durch OutputStreamWriter.

Hier der Code für die Initialisierung:
Code:
	public Connector(String adress){
		// String hostname
		hostname = adress;
		
		// URL baseURL
		// ConnectionHelper wandelt den String adress in eine URL um und überschreibt den TrustManager
		baseURL = ConnectorHelper.start(adress);	
		try{
			// BufferedReader in
			in = new BufferedReader( new InputStreamReader(	baseURL.openStream()) );

			//URLConnection connection
			connection = baseURL.openConnection();		
			connection.setDoOutput(true);
			
			// OutputStreamWriter out
			out = new OutputStreamWriter(connection.getOutputStream());			
		} catch(Exception e){ 
		System.err.println( "Unhandled " + e.toString() ); 
		}
	}

Das eigentliche Problem stellt das Einloggen dar. Folgende Formulardaten werden vom Server gesendet:
Code:
[B][COLOR="Red"]<form method="post" action="https://qis.fh-trier.de/qisserver
/rds;jsessionid=D58FFC53E4A8C03019BE90A663360874?state=user&amp;type=1&amp;category=auth.login&amp;startpage=portal.vm" name="loginform">[/COLOR][/B]
       <table align="left" border=0>
         		 <tr><th align="left" class="gross" valign="top" colspan="3"><h1 class="gross" style="margin:0">Anmelden</h1></th></tr>
                       <!-- Benutzername und Passwort -->
	      <!-- Ist "Absperren" aktiv? -->
	                       <tr valign="top">
                     <td class="normal">
                         <label for="Benutzername"> Benutzername:</label>
                     </td>
                     <td class="normal">
                         [B][COLOR="Red"]<input id="Benutzername" type="text" name="username" value="" class="loginuser" size="10" tabindex="1">[/COLOR][/B]
                     </td>
                     <td class="normal">
                       <center><input class="submit" type="submit" name="submit" value="&nbsp;Ok&nbsp;" tabindex="7"></center>
                     </td>
                 </tr>
                 <tr>
                     <td class="normal">
                         <label for="pass">Passwort:&nbsp;</label>
                     </td>
                     <td class="normal">
                         [B][COLOR="Red"]<input type="password" id="pass" name="password" value="" class="loginpass" size="10" tabindex="2">[/COLOR][/B]
                     </td>
                 </tr>
	                     <!-- /Benutzername und Passwort -->
       </table>
</form>

Und u.a. so habe ich versucht die Postdaten zu verschicken:
Code:
	public void eingabe(){
		try{
			// Construct data
	        String data = "";
			data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode("meinName", "UTF-8");
			data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode("meinPasswort", "UTF-8");

	        // Send data
	        out.write(data);
	        out.flush();
	    
	        // Get the response
	        String line;
	        while ((line = in.readLine()) != null) {
	            System.out.println( line );
	        }
	        out.close();
	        in.close();
		} catch(Exception e){	
			System.err.println("Closing failed " +e.toString());	
		}
	}

Vielen Dank schonmal an alle, die bis hierher gelesen haben ;)

Der Code funktioniert leider nicht, ich bekomme einfach wieder die gleiche Seite angezeigt, wo ich mich einlogen kann. Ich hab mittlerweile rausgefunden, dass die URL eine GET Variable (type, siehe oben) hat, die man auf 1 (statt 0) setzen muss, um sich einloggen zu können. Sieht man ja auch beim Formularcode, dort ist type=1 gesetzt, sonst wird immer nur type=0 benutzt (vor und nach der Anmeldung)
Wenn ich das als Standardadresse nehme, dann erscheint: Anmeldung fehlgeschlagen.

Für einen Tipp wäre ich sehr dankbar, ich habe denke ich mittlerweile alle Tutorials im Inet, die ich finden konnte durch. Leider ohne Erfolg. Mein dicker Java Wälzer hier Zuhause behandelt nicht mal das Thema HTTP/SSL etc, ebenso wenig wie das alte Skript meines Profs.

Hab auch schon versucht über dieses HttpClient-Projekt die Sache zu regeln. Dies scheiterte bei mir aber an dem Zertifikat der FH.

Die oben benutzten Codes sind größtenteils die, die ich auf den Tutorialseiten von sun finden konnte. Nicht das einer auf die Idee kommt, ich hätte nicht die Javadoc bemüht.

mfg,
Sam
 
Zuletzt bearbeitet:
Gute Frage...ich weiß es nicht.

Bräuchte ich also noch sowas?
Code:
data += "&" + URLEncoder.encode("JSESSIONID", "UTF-8") + "=" + URLEncoder.encode("id", "UTF-8");
 
Hab's versucht, aber hat leider auch nicht geklappt :(

session ist ein String, und beinhaltet den die vorher geparste session id, mit:
Code:
	public void eingabe(){
        String line;
        String tmp="";        

        try{
            while ((line = in.readLine()) != null) {
                if(line.contains("jsessionid=")){
                	tmp = line.substring( line.indexOf("jsessionid"), line.indexOf("state"));
                	this.session = tmp.substring(tmp.indexOf("=")+1, tmp.indexOf("?"));
                }
            }
            System.out.println(session);

            // Construct data
	        String data = "";
			data = URLEncoder.encode("jsessionid", "UTF-8") + "=" + URLEncoder.encode(session, "UTF-8");			
			data +="&" + URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode("ich", "UTF-8");
			data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode("passwort", "UTF-8");
	        // Send data
	        out.write(data);
	        out.flush();
	    
	        // Get the response
               //EDIT:
                baseURL = ConnectorHelper.start("https://qis.fh-trier.de/qisserver/rds?state=user&type=1&category=auth.login&startpage=portal.vm");
	        in = new BufferedReader( new InputStreamReader(	baseURL.openStream()) );
	        while ((line = in.readLine()) != null) {
	            System.out.println( line );
	        }
	        out.close();
	        in.close();
		} catch(Exception e){	
			System.err.println("Closing failed " +e.toString());	
		}
	}

Er gibt mir als Input wieder den Quelltext der Anmeldeseite zurück ohne Rückmeldung ob er irgendwas gemacht hat.

Edit:
Mir fällt grad auf, dass ich mit dem InputStreamReader wieder die baseURL URL öffne, ich müsste aber eine neue URL öffnen, nämlich die der "Antwortseite" des einloggens....Na mal schauen ob ich die jetzt irgendwie rausbekomme, müsste ja quasi die gleiche URL sein wie bei POST nur ohne sessionid.

Edit2:
Es tut sich was, jetzt komm ich wenigstens bis zur Meldung: Anmeldung fehlgeschlagen.
Bin planlos :( (wie ich das hasse planlos beim Programmieren zu sein...)
 
Zuletzt bearbeitet:
So, hab's endlich geschafft (nach 3 Tagen..).

Ich hab nun doch Httpclient zum Laufen gebracht, indem ich ein kleines php-Testskript geschrieben hab. Der Tipp mit der SessionID war letztendlich Gold wert, ich wär sicherlich ned selbst drauf gekommen!

Danke nochmal :)
 
Lieber samotyr,

ich wäre Dir sehr dankbar, wenn Du deine Lösung posten könntest. Denn ich kämpfe mit dem gleichen Problem und packe es irgendwie nicht.

Mit bestem Dank
ghazalin
 
Hallo,

ja sicher, werde ich machen. Zunächst einmal bräuchtest du den HttpClient (Jakarta Commons). Hier gehts zur Projekt Homepage:
Klick

Auf der Seite ist beschrieben, wie man das installieren muss (unter User Guide, Tutorial).

Danach bin ich eigentlich im großen und ganzen nach den Tutorials vorgegangen.
Mein Code bezieht sich auf eine Https Verbindung, das müsstest du natürlich entsprechend ändern, falls du Http benutzen möchtest.

Code:
import java.io.*;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.protocol.*;

public class Connect {
	static private String url = "https://internet.adresse";
	static private String postURL= "https://POST.adresse";
	
	private String location;
	private String session ="";
	private String status = "Ready";
	private String user;
	private String pass;
	private HttpClient client;
	private GetMethod get;
	private PostMethod post;

	public Connect(){
		Protocol.registerProtocol("https", new Protocol("https",new EasySSLProtocolSocketFactory(), 443));		
		client = new HttpClient();
        get = new GetMethod( url );
        post = new PostMethod( postURL );
	}
Bei post.adresse die Adresse eintragen, an die die POST daten geschickt werden. Findest du vermutlich irgendwo bei den <form> Einträgen der HTML Adresse (<form method="post" action="postadresse")


Das eigentliche Einloggen mit der POST-Methode hab ich dann so gelöst:
Code:
	private void doPostLogin(){
        try{
        	session = getSessionID(getPage(url)); //sessionID parsen
        	post.setRequestBody( initPostData() );
        	client.executeMethod( post );
        	String redirectLocation="";
            Header locationHeader = post.getResponseHeaders()[3];
            redirectLocation = locationHeader.getValue();            
            post.releaseConnection();
        	post = new PostMethod(redirectLocation);
        	client.executeMethod( post );
        	post.releaseConnection();
        }
        catch(Exception e){
        	System.err.println( "Connect::execPost()" + e.toString() );
        	fatalError = true;
        	errorState = e.getMessage();
        }
		
	}

Die Funktion initPostData():
Code:
      //pass,user,session sind alle vom Typ String
	private NameValuePair[] initPostData() throws Exception{
        if( session != ""){
        	NameValuePair[] data = {
                new NameValuePair("jsessionid", session),
                new NameValuePair("username", user),
                new NameValuePair("password", pass)
              };
        	return data;
        }
        throw ( new Exception("Session ID not initialized") );
	}

Hab ein bisschen was rausgekürzt, es könnten also jetzt Fehler drin sein. Ich hoffe aber die Idee kommt trotzdem rüber. Diese ganze Redirect-Geschichte im Code könnte für dich eventuell überflüssig sein, bei der Seite mit der ich mich verbinden wollte war das notwendig.

Falls du noch Fragen hast, dann steh ich gerne zur Verfügung.
 
Danke für Deine Hilfe.
Ich habe es auch an meinen Bedürfnissen angepasst. Ich habe trotzdem noch einige Fragen.
1. Die Zeile mit der registerprotocol habe ich folgendermassen geändert, weil ich nur mit http arbeite:

Protocol.registerProtocol("http", new Protocol("http",new ProtocolSocketFactory(), 443));

Bei ProtocolSocketFactory() sagt mir eclipse "Cannot instantiate the type ProtocolSocketFactory".

reicht da nicht das Erzeugen eines neuen Elementes der Klasse ProtocolSocketFactory??

2. Sind getSessionID und getPage zwei von Dir geschrieben Funktionen? Wenn ja, könntest Du deren Inhalt vielleicht auch posten?

Ich entschuldige mich, falls meine Fragen Dirpanal vorkommen. Ich mach gerade die ersten Erfahrungen auf diesem Gebiet.

Mit bestem Dank
ghazalin
 
Achso, das liegt daran, dass ich noch eine weitere Klasse gebaut habe um alle SSL Zertifikate annehmen zu können. Das ist bei dir aber eigentlich gar nicht nötig, da du soweit ich das verstanden habe, eine HTTP Verbindung aufbauen willst. Demnach brauchst du die Zeilen mit Protokol gar nicht.

So sollte es reichen:
Code:
public Connect(){
	client = new HttpClient();
        get = new GetMethod( url );
        post = new PostMethod( postURL );
	}

getPage und getSessionID sind von mir.

getPage:
Code:
public String getPage(String newURL){
        String result = "";
		try{
        	get = new GetMethod(newURL);
        	client.executeMethod( get );
        	result = streamToString(get.getResponseBodyAsStream());
        	get.releaseConnection();
        }
        catch(Exception e){
        	System.err.println( "Connect::execGet()" + e.toString() );
        	fatalError = true;
        	errorState = e.getMessage();
        }
        return result;
	}

und streamToString:
Code:
	private String streamToString(InputStream in){
       	String result ="";
    	int i;
    	try{
	    	for(i=in.read(); i!=-1; i=in.read()){
	    		result += (char)i;
	    	}
	   	} catch(Exception e){
	   		System.err.println( "Connect::streamToString() " + e.toString() );
	   		fatalError = true;
	   		errorState = e.getMessage();
	   	}
	   	if(result != null)
	   		return result;
	   	else
	   		return null;
	}


Bei der SessionID müsstest du deine URL nach der ID parsen. Ich weiß nicht ob mein Code auch bei dir geht, ist halt hardcoded.
getSessionID:
Code:
	private String getSessionID( String content ){	
		String tmp;
		String line="";
		String[] lines;
		lines = content.split("\n");
		int i;      
		for(i=0; i<lines.length; ++i)
			if( lines[i].contains("jsessionid"))
				line = lines[i];
		tmp = line.substring( line.indexOf("jsessionid"), line.indexOf("state"));
		return( tmp.substring(tmp.indexOf("=")+1, tmp.indexOf("?")) );
	}

Am leichtesten bekommst du die SessionID raus, indem du getPage benutzt und den zurückgegebenen String in der Console anschaust. Im Browser wird die ID nämlich nicht angezeigt (zumindest bei mir).

mfg
 
Lieber samotyr,
Danke für Deine Unterstützung.
Ich habe es bei mir so implemetiert:
Code:
public class HttpConnect 
{
    //URL der Anmeldemaske
    private String url = "http://xxx:8080/servicezentrum/LoginDialogServlet";
    //URL in der action-Parameter des forms
    private String postURL = "/servicezentrum/LoginServlet";
		
    private String location;
    private String session ="";
    private String status = "Ready";
    private String user = "xxxx";
    private String pass = "yyyy";
    private HttpClient client;
    private GetMethod get;
    private PostMethod post;
    private boolean fatalError = false;
    private String errorState = "";

    public void Connect()
    {	
         client = new HttpClient();
         get = new GetMethod( url );
         post = new PostMethod( postURL );
     }
		
     public String getPage(String newURL)
    {
	String result = "";
	try
	{
		get = new GetMethod(newURL);
		client.executeMethod(get);
				
		BufferedReader rd = new BufferedReader(
                                       new InputStreamReader(get.getResponseBodyAsStream()));
		 String line;
		 while ((line = rd.readLine()) != null) 
		 {
		       line += rd.readLine();
		       System.out.println(line);
		       result += line + '\n';
		  }
		  rd.close();
		  		        
		get.releaseConnection();
	}
	catch (Exception e)
	{
	System.err.println("Connect::execGet()" + e.toString());
	fatalError = true;
	errorState = e.getMessage();
	}
	return result;
    }
		
    private String getSessionID(String content)
    {
                 String sSessionID = "";
	Header[] aHeader = get.getResponseHeaders();
			
	for (int l = 0; aHeader != null && l < aHeader.length; l++)
	{
		Header hCookie = aHeader[l];
		HeaderElement[] heCookie = hCookie.getElements();
		for (int i= 0; heCookie != null && i < heCookie.length; i++)
		{
			if ( heCookie[i].getName().equals("JSESSIONID"))
			{
				sSessionID = heCookie[i].getValue();
				break;
			}
		}
		if (sSessionID.length() > 0)
		   break;
                  }
			
	return sSessionID;
    }
		
    private void doPostLogin()
    {
	try
	{
	session = getSessionID(getPage(url)); //sessionID parsen
	post.setRequestBody(initPostData());
	client.executeMethod(post);
	//String redirectLocation = "";
	//Header locationHeader = post.getResponseHeaders()[3];
	//redirectLocation = locationHeader.getValue();
	post.releaseConnection();
	//post = new PostMethod(redirectLocation);
	//client.executeMethod(post);
	//post.releaseConnection();
	}
	catch (Exception e)
	{
	System.err.println("Connect::execPost()" + e.toString());
	fatalError = true;
	errorState = e.getMessage();
	}
    }
    //pass,user,session sind alle vom Typ String
    private NameValuePair[] initPostData() throws Exception
    {
	if (user != "" || pass != "" || session != "")
	{
	NameValuePair[] data = { new NameValuePair("JSESSIONID", session),
			new NameValuePair("j_username", user),
			new NameValuePair("j_password", pass) 
                  };
             return data;
    }
     throw (new Exception("Session ID not initialized"));
  }
}

Mein einziges Problem dabei ist, dass das Programm mir immer sagt:
"Connect::execPost() java.lang.IllegalArgumentException: host parameter is null"
Wobei die drei Parameter username, password und sessionid mit Strings befüllt sind.
Die URL sind auch mit Strings befüllt.
Hast Du eine Idee, woran es liegen kann?

Übrigens: den Aufruf in meinem Programm sieht so aus:
Code:
String url = "http://xxxt:8080/servicezentrum/LoginDialogServlet";
String postUrl = "/servicezentrum/LoginServlet";
try
{	
	HttpConnect httpConn = new HttpConnect();
	httpConn.url = url;
	httpConn.postURL = postUrl;
	httpConn.Connect();
	httpConn.doPostLogin();
}
catch (Exception ee)
{
	ee.printStackTrace();
}
 
public void Connect()
{
client = new HttpClient();
get = new GetMethod( url );
post = new PostMethod( postURL );
}
Das war mein Konstruktor, du müsstest das natürlich entsprechend für deine Klasse umbennen, in diesem Fall:
public void HttpConnect()
{
client = new HttpClient();
get = new GetMethod( url );
post = new PostMethod( postURL );
}
Wenn du url und postURL über die Main angeben willst, dann schreib einfach den Konstruktor um:
public void HttpConnect(String url, String postURL)
{
client = new HttpClient();
get = new GetMethod( url );
post = new PostMethod( postURL );
}

Aufruf in main():
String url = "http://xxxt:8080/servicezentrum/LoginDialogServlet";
String postUrl = "/servicezentrum/LoginServlet";
try
{
HttpConnect httpConn = new HttpConnect( url,postUrl );
httpConn.doPostLogin();
}
catch (Exception ee)
{
ee.printStackTrace();
}

Im Moment hast du im Konstruktor zwei Nullpointer, was dir der Compiler hier auch mitteilt:
Connect::execPost() java.lang.IllegalArgumentException: host parameter is null
Das bedeutet, dass die Adressse ungültig ist.

Weiterhin hast Du als postURL genommen:
private String postURL = "/servicezentrum/LoginServlet";

Probier mal die gesamte Adresse einzutragen. Also vermutlich: "http://xxx:8080/servicezentrum/LoginDialogServlet".
Ist LoginDialogServlet ein Unterordner? Ich hab mich immer auf Dateien bezogen, also beispielsweise: "http://meineadresse.de/login.php"; statt "http://meineadresse.de/".
Könnte aber natürlich auch so funktionieren, wie du's hast.

Bei doPostLogin verarbeitest du die Antwort des Servers übrigens nicht (getPage).
 
Es lag doch daran, dass der Pfad relativ übergeben wurde und nicht absolut.
Nach meiner jetzigen Erfahrung geht es auch so, wie ich es mache, und nicht nur mit Dateien.

Der totale Erfolg ist aber noch nicht erreicht worden. Ich komme zwar bis zur Seite, wo die Suchergebnisse des Formulars sind aber nicht weiter.
Bei der Untersuchung des Inhaltes, welchen ich mit
Code:
BufferedReader rd = new BufferedReader(new InputStreamReader(get.getResponseBodyAsStream()));
hole, bekomme ich einen Fehler solcher Art:
Code:
[ServletException in:/tiles-layouts/leftMenu.jsp] Array index out of range: 3'
java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 3
	at org.apache.jsp.tiles_002dlayouts.leftMenu_jsp._jspService(leftMenu_jsp.java:138)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
... etc
Aus dem Inhalt brauche ich eigentlich nur eine Zeile, die ganz unten steht. Bis dahin komme ich aber nicht.
 
Also ein Fehler der Website? Das ist der Inhalt aus dem BufferedReader?
Wenn du willst kann ich den Code mal überprüfen, dazu müsstest du mir den gesamten Code schicken.
 
Hi,

vielen Dank für deine Hilfsbereitschaft.

- Ja, das der Inhalt aus dem BufferedReader. Denn ich habe den Inhalt in eine Datei ausgegeben und mir diesen angeschaut.

- Es scheint ein Fehler der Webseite zu sein und zwar ab der Zeile 71 der .html-Datei:
<img alt="" src="/SPK2/images/tr_curve_white.jpg" id="tr" height="6" width="6">
<div id="sectionLinks">
<div id="h3">Release
</div>
<a class="search_ben" href="/SPK2/LeftMenu.do?action=Recherchieren&amp;browserlanguage=000">Recherchieren</a>
<div id="h3">Stammdaten
</div>
<a class="show_stamm" href="/SPK2/LeftMenu.do?action=StammdatenAnzeigen&amp;browserlanguage=000">Stammdaten anzeigen</a>
<div id="h3">Dokumentation
</div>
<a class="show_stamm" href="/SPK2/LeftMenu.do?action=Dokumentation">SPK-Hilfe</a>
</div>

Im Anhang habe ich Dir mein Code und den Inhalt der Seite, die ich parsen möchte, gepackt.
ganz unter in der Datei ist ein XML export:

<a href="Recherchieren.do?6578706f7274=1&amp;d-7101074-e=3" _base_href="http://xxx:8080/SPK2/">

da brauche ich den _base_href und href zusammenfürhren, um die Datei, die sich dahinter verbirgt runterzuladen.


mfg und vielen Dank
ghazalin
 

Anhänge

  • httpClient.rar
    15,3 KB · Aufrufe: 309
Zuletzt bearbeitet: (Ich habe noch auf die Fragen des vorigen Beitrag geantwortet.)
Da das Testen bei mir nicht geht, machen wir nochmal hier weiter :)

Was mir grade noch einfällt:
[ServletException in:/tiles-layouts/leftMenu.jsp] Array index out of range: 3'

Vielleicht versuchst du zuviele Daten mit POST zu übergeben. Hast du mal getestet was passiert, wenn du weniger übergibst? Selber Fehler? Und bist 100%ig sicher, dass die sessionID stimmt?
Der Fehler muss schon irgendwie im Code zu finden sein, da die Seite ja über den Browser (hoffentlich) funktioniert.
 
1. Im Browser läuft es einwandfrei.

Ich möchte aber mein Programm mit den Daten aus dieser Seite updaten, ohne dass der Benutzer dies über den Browser machen muss.


2. Ich habe es versucht mit mehreren Variationen der Post-Parameter und habe die Anzahl bis auf null reduziert. Hat aber nicht geholfen.

Ich werde aber nicht aufgeben. Ich versuche weitere Wege.

3. Die sessionid hole ich immer aaktuell (getSessionID)
 
Kannst du mal das hier testen und posten was als Ergebnis kommt?

Code:
	private void doPostLogin()
	{
		try
		{
			session = getSessionID(getPage(url + loginURL));
			post.setRequestBody(initPostData(0));
			client.executeMethod(post);
			
			// Response:
			[B]System.out.println( post.getResponseBodyAsString() );[/B]
			post.releaseConnection();
			[B]System.exit(1);[/B]
			
                        System.out.println("Login gepostet");

			post = new PostMethod(url + xmlURL);
			post.setRequestBody(initPostData(1));
			client.executeMethod(post);
			post.releaseConnection();
			System.out.println("Form data gepostet");
			
			String sXmlPath = getXMLPath(getPage(url + xmlURL));
			System.out.println("XML Path: " + sXmlPath);
		}
		catch (Exception e)
		{
			System.err.println("Connect::execPost()" + e.toString());
		}
	}
 
Das ist das Ergebnis:
[CODE<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>
Systemfehler
</TITLE>
<style type="text/css">
.rosabox { background-color:#FF80C0; width:500px; padding:6px; margin:0px; }
</style>

</HEAD>
<body TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#000000" ALINK="#000000" VLINK="#000000" background="images/background.jpg">
<TABLE border="0" cellpadding="0" cellspacing="0" width="100%" >
<TR>
<TD></TD>
</TR>
<TR>
<TD valign="top" width="200">
<table border="0" cellpadding="10" cellspacing="0">
<tr><td height=32>&nbsp;</td></tr>
<tr><td height=32>&nbsp;</td></tr>
<tr><td height=32>&nbsp;</td></tr>
<tr><td height=32>&nbsp;</td></tr>
<tr><td height=32>&nbsp;</td></tr>
<tr><td height=32>&nbsp;</td></tr>
<tr><td height=32>&nbsp;</td></tr>
<tr><td height=16></td></tr>
<tr><td>
<a style="color:#FFFFFF" target="_parent" href="/servicezentrum/LoginServlet?ContactPerson=Yes">
Ansprechpartner</a>
</td></tr>
<tr><td height=16></td></tr>
<tr><td>
<a style="color:#FFFFFF" target="_parent" href="/servicezentrum/LoginServlet?Registration=Yes">
Registrierung</a>
</td></tr>
<tr><td height=16></td></tr>
<tr><td>
<a style="color:#FFFFFF" target="_parent" href="/servicezentrum/LoginDialogServlet?dialoglanguage=GERMAN">
Login</a>
</td></tr>
</table>

</TD>
<TD valign="top" style="padding-left:2cm">
<DIV style="position:absolute; top:7.5cm; left:10cm;"><H2><P class="rosabox">
Es ist ein Systemfehler aufgetreten!
<BR>
<BR>
Versuchen Sie es später nocheinmal oder
kontaktieren Sie Ihren Systemadministrator!
<BR>
</DIV>

</TD>
</TR>
</TABLE>
</BODY>
</HTML> [/CODE]

Mit der Zeile
Code:
session = getSessionID(getPage(url + loginURL));

durchlaufe ich schon die Loginseite, um die Sessionid zu bekommen. Die klappt auch so weit.

Bei der Zeile:

Code:
String sXmlPath = getXMLPath(getPage(url + xmlURL));

wo ich den Pfad für die xml-Datei holen möchte, da taucht das Problem auf
 
Zurück
Oben