Input/Output Formular absenden und Quelltext auslesen

rahan

Mitglied
Hey Java Junkies,

ich weiß nicht ob Ihr nur in euren Fach gut seit, oder ob ihr mir auch bei meinen Thema helfen könnt. 🙂
Wäre jedenfalls sehr dankbar.

Also die Webseite Fondsboerse hat ihre Homepage umgestellt. Ich hatte vorher ein Javaprogramm geschrieben, was mir anhand der Fondssuche alle Schiffsfonds oder Immobilienfonds zurückgibt um sie aufzulisten.

Ich hatte es vorher einfach so gemacht, dass ich eine URL mit den Formularparameter gebastelt habe und diese aufgerufen hab.
Java:
 URL url = new URL(SchiffeURL);
		    URLConnection conn = url.openConnection();	
	
		    //Der Pufferreader ließt den Quellcode der Webseite zeilenweise ein.
		    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
		    
		    //Erst mal den Quelltext zusammenpacken
		    String strQuelltext = "";
		    String line = "";
		    
		    while ((line = rd.readLine()) != null) {
		    	strQuelltext +=line;
		    }

Aber genau dieses URL zusammenbauen macht mir Probleme. Die Webseite https://service.zweitmarkt.de/Handel/Fondsliste.aspx ist eine aspx Webseite und ich raff einfach nicht wie dort das Formular funktioniert. Weiß jemand von euch wie ich z.B. in Java die Webseite aufrufen kann mit den Parameterm Fondsart = Schiff und Anzahl Datensätze= 50 (unterhalb der Liste) und mir den Quelltext geben lasse? Vielleicht geht auch keine get übertragen, sondern nur post.

Gruß Rahan
 
Du musst doch einfach nur die URL in deinem Browser mit Parametern eintippen, funktioniert dies, ist GET erlaubt, geht´s nicht, wird nur POST unterstützt.
 
Hab mir die Seite angeschaut. Je nachdem, wie strikt der Server die Requests prüft, kommst Du mit GET nicht weiter. Der Parameter "viewState" enthält zu viele Daten, um sie in einen URL-Parameter zu packen. Du solltest Dir also einen POST-Request zusammen basteln. Dabei unterstützen Dich Libraries wie die hier: HttpComponents HttpClient Overview

Kann sein, dass Du den Parameterflow etwas genauer untersuchen musst, da wird nämlich einiges mit JavaScript zusammengebastelt. Dabei finde ich HTTP-Requestanalyse Plugins für den Firefox ganz hilfreich. Du lädtst die Seite, schickst eine Suchanfrage ab, der Analyser zeigt Dir an, was als HTTP-Request gesendet wird. Das kannst Du dann in Java nachbauen.
 
Hallo nillehammer,

kannst du mir noch mal helfen. Es wird langsam dringend.
Also ich hab mit httpfox mir die Parameter angeschaut die Übertragen werden.
Und versucht diese in eine Post Anweisung zu Packen. Aber die Ausgabe ist, als hätte ich keine Eingaben gemacht. Es ist nicht gefiltert, es sind nur 10 Datensätze.

Ich kann ja mal mein Java Posten:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;


public class testOneFondsboersePage {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		testOnePage2("https://service.zweitmarkt.de/Handel/Fondsliste.aspx");

	}

    public static int myRandom(int low, int high) {  
        return (int) (Math.random() * (high - low) + low);  
    }  
    
	public static void testOnePage2(String strLink) throws IOException{
		
		//Für den Button Suchen
		String x = Integer.toString(myRandom(2,94));
		String y = Integer.toString(myRandom(2,21));
		
		//Das Formular wird in Post abgesendet
		URL uUrl = new URL(strLink);
		//String body = "ctl00$ContentPlaceHolder1$CboInitiator=Alle&ctl00$ContentPlaceHolder1$RadComboBoxFondsart=Schiff&ctl00$ContentPlaceHolder1$RadComboBoxFondstyp=Alle&ctl00$ContentPlaceHolder1$RadGridFondliste$ctl00$ctl03$ctl01$PageSizeComboBox=50&ctl00$ContentPlaceHolder1$ImageButton1.x="+x+"&ctl00$ContentPlaceHolder1$ImageButton1.y="+y;
		String body="RadStyleSheetManager1_TSSM=;Telerik.Web.UI, Version=2012.1.215.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4:de-DE:b29b07e8-2c1e-44e5-9e1b-59bb6459fb01:1c2121e:9e1572d6:ed2942d4:45085116"
					+"&RadScriptManager1_TSM=;;System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:de-DE:89093640-ae6b-44c3-b8ea-010c934f8924:ea597d4b:b25378d2;Telerik.Web.UI:de-DE:b29b07e8-2c1e-44e5-9e1b-59bb6459fb01:16e4e7cd:f7645509:22a6274a:24ee1bba:f46195d3:2003d0b8:1e771326:aa288e2d:58366029:e330518b:c8618e41:e4f8f289:ed16cbdc"
					+"&__EVENTTARGET="
					+"&__EVENTARGUMENT="
					//VIWÈWSTATE macht das ganze zulang
					+"&__PREVIOUSPAGE=EHJkweG_vbhu-kT5lk0EOvqmSnELS8YuhwRlLqDOJwjWq19VfHzBxArMxJj1ZLwOXA2wx27KUW_l3lV4IAXq3Gn5jk64ik4EL55LJg4bBnE1"
					+"&__EVENTVALIDATION=/wEWQAKr57aaCwL7qYWMCgLBq+GeCgKB6JW3DAKbnaqyAQKwm8CyAwK9vIn8DAKurvP6BgKuru/6BgKurvv6BgKurvf6BgKuroP7BgKurv/6BgKov4DeBAKvro+uAQKvrpOuAQKvrquuAQKvrqOuAQKvrvutAQKwrpuuAQKwrpOuAQKwrquuAQKwrvetAQKwrvutAQL/+/H8BQLGycX7DgKD08R1Ao/TnuIMApv86bICAubIra0LAoDTzK0PApLThpoLApb84egOAuvItecHAoDT1OUNApLTjtIJAvuFkb8EAsbUpM4NAsGN9fMPAtGN7+ALAvaFibcBAsvUzLEKAsGNva0OAtGNl5oKAuCFgf0FAqXU1PsOAsCNxXUC0o2f4gwC/IX5sgICydS8rQsCwY3NrQ8C0Y2HmgsC94Xx6A4CytTE5wcCwY3V5Q0C0Y2P0gkC2KmOvwQCofehzg0C+oL18w8CiIPv4AsC86mGtwECovfJsQoC+oK9rQ4CiIOXmgoSwoWItGhLAjrSPnJFOOATC3sUmhueaOIlW8dL44ICnw=="
					+"&ctl00$ContentPlaceHolder1$CboInitiator=Alle" //Alle
					+"&ctl00_ContentPlaceHolder1_CboInitiator_ClientState="
					+"&ctl00$ContentPlaceHolder1$RadComboBoxFondsart=Schiff" //Schiff
					+"&ctl00_ContentPlaceHolder1_RadComboBoxFondsart_ClientState="
					+"&ctl00$ContentPlaceHolder1$RadComboBoxFondstyp=Alle" //Alle
					+"&ctl00_ContentPlaceHolder1_RadComboBoxFondstyp_ClientState="
					+"&ctl00$ContentPlaceHolder1$ImageButton1.x="+x //Immer mal woanders auf den Button klicken
					+"&ctl00$ContentPlaceHolder1$ImageButton1.y="+y
					+"&ctl00$ContentPlaceHolder1$RadGridFondliste$ctl00$ctl02$ctl02$FilterTextBox_Fonds="
					+"&ctl00$ContentPlaceHolder1$RadGridFondliste$ctl00$ctl03$ctl01$PageSizeComboBox=50" //50 Einträge
					+"&ctl00_ContentPlaceHolder1_RadGridFondliste_ctl00_ctl03_ctl01_PageSizeComboBox_ClientState="
					+"&ctl00_ContentPlaceHolder1_RadGridFondliste_rfltMenu_ClientState="
					+"&ctl00_ContentPlaceHolder1_RadGridFondliste_ClientState=";
		
		HttpURLConnection  connection = (HttpURLConnection) uUrl.openConnection();
		connection.setRequestMethod( "POST" );
		connection.setDoInput( true );
		connection.setDoOutput( true );
		connection.setUseCaches( false );
		connection.setRequestProperty( "Content-Type",
		                               "application/x-www-form-urlencoded" );
		connection.setRequestProperty( "Content-Length", String.valueOf(body.length()) );

		OutputStreamWriter writer = new OutputStreamWriter( connection.getOutputStream() );
		writer.write( body );
		writer.flush();
		 BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
		//Erst mal den Quelltext zusammenpacken
	    	String strQuelltext = "";
	    	String line = "";
	    	while ((line = rd.readLine()) != null) {
	    		strQuelltext +=line+"\n";
	    	}
		System.out.println(strQuelltext);

    }

}

Ich muss danach auch noch Weiterdenken und mir die Links raussuchen. Allerdings versteh ich den Quelltext nicht wie die Links zusammengestellt sind.
 
Also Dein Code zum Absetzen des Posts sieht erstmal gut aus. Obwohl ich trotzdem dazu rate, das mit einer Library zu machen. Beim Reverse-Engeneering der Seite kannst Du keine Hilfe von mir erwarten. Das finde ich etwas zu viel verlangt.
 

Zurück
Oben