# Html-Source über URL in einen String speichern?



## the_chaox (29. Jul 2005)

Hi zusammen!

Ich will den Quelltext einer bestimmten Seite in einen String speichern. 

Gibt es in der URL Klasse irgendeine Methode mit der ich das realisieren kann?
Also ich übergebe zum Beispiel die Adresse als Parameter und erhalten den Html-Quelltext der Site als String!

Danke für Hilfe im voraus!


----------



## Fry (29. Jul 2005)

Hallo,

in der Klasse URL gibt es das IMHO nicht. Du kannst aber eine HttpURLConnection aufmachen und davon den Stream auslesen, den schreibst du dann zeilenweise in einen String. Würde ich jetzt mal so sagen  8) 

Fry


----------



## sisko78 (29. Jul 2005)

Mir fällt hierzu
URL#openStream
oder wie von Fry angedeutet, URL#openConnection + URLConnection#getInputStream
ein


----------



## the_chaox (29. Jul 2005)

Jo, hab`s jetzt, vielen Dank!

Aber jetzt hab ich folgendes problem:

Es geht um eine Site auf der ich zwar eingeloggt bin, wenn ich aber über das Java-Prog den Quelltext auslese, dann bin ich NICHT eingeloggt, logisch!
Kann ich jetzt irgendwie die Session-ID oder den Cookie mitschicken wenn ich die Site über das prog aufrufe damit er erkennt das ich eingeloggt bin?


----------



## Fry (29. Jul 2005)

Hey cool,

du sitzt an dem gleichem Prob wie ich auch   
Mal gucken ob du auch noch zu meinem Posting kommst  :wink: 

Bei meiner Seite ist es so, dass nach dem Einloggen eine Seite zurückgesendet wird, in der die Session ID steht. Wenn du weißt wie sie aufgebaut ist, kannst du die immer mit nem Pattern suchen (regex).
Also wieder Stream aufmachen und erstmal alles lesen was da kommt und dann mit Regular Expression durchsuchen.
Du mußt diese ID bestimmt dann weiter verwenden, oder?

Fry


----------



## the_chaox (29. Jul 2005)

Jep, die Session ID kann ich sowieso auslesen mit

.getHeaderFields()

Allerdings weiß ich jetzt nicht wie ich sie weiterverwenden soll, bzw. wie ich sie an den Host zurückschicke(?)!


----------



## the_chaox (29. Jul 2005)

Sorry für Doppelpost  :bae: 

Also, hier sind mal `n paar links zu dem Thema mit kleinen Beispielen, vielleicht steigst du da ja durch:

http://javaalmanac.com/egs/java.net...okie.html?l=rel
http://javaalmanac.com/egs/java.net...kies.html?l=rel
http://www.rgagnon.com/javadetails/java-0092.html


----------



## Fry (29. Jul 2005)

huhu,

also bei mir steht die im Text, aber ich habe eh mehr Probleme mit dem Feststellen wann die Seite komplett geladen ist  :lol: egal, bei deinen Links geht bei mir nur der letzte

Fry


----------



## Campino (29. Jul 2005)

huhu, 

wir arbeiten zu dritt ) alle am selben Problem(bereich), aber ich glaube, ihr habt mein spezielles Problem gelöst, also, ich sende per PostMethod (aus Jakarta httpclient-3.0)) Post Daten (eben einen Login) an ein serverside-script (vermutlich php, eventuell auch Python, aber das sollte doch egal sein, oder?). Wie kann ich jetzt die Seite, die ich als Antwort erhalte, auslesen (so, dass ich sie als String vorliegen habe)? Das öffnen eines Stream über die verwendete UrlConnection gibt eine andere Seite aus...


----------



## the_chaox (29. Jul 2005)

Uff, kann dir gerade nicht ganz folgen   :autsch: 

Also ich erhalte den Source-Code der angeforderten Seite als String, so wie es auch sein sollte, aber da mein Prog den Cookie nicht an die Seite mitsendet (genau DA ist mein Problem), erhalte ich nicht den Source den ich haben will sondern "bla bla bla, sie müssen eingeloggt sein um diese Seite zu betreten, bla bla bla"

Also, hier ist mal mein bisheriger Code:


```
public class SourceMurgs
{ public static void main(String[] args) 
                throws MalformedURLException, IOException 
  { 
	String urlString="http://blablabla.de";
	
	   URL url = new URL("http://blablabla.de");
	   URLConnection conn = url.openConnection();
	   
	   String cookie = conn.getHeaderField("Set-Cookie");  // Herausfiltern der Session-ID.
	   System.out.println(""+conn.getHeaderFields());      // Ausgabe des gesamten Headers.
	   	   
	   
	   BufferedReader br = 
       new BufferedReader(
           new InputStreamReader(
               new URL(urlString).openStream()));
    String inText; 
    System.out.println(cookie);                       // Ausgabe der Session-ID.

    while ((inText = br.readLine()) != null)       // Ausgabe des html-Quelltext der
	System.out.println(inText);                   // angeforderten Site.
  }    
}
```

Also nochmal zu meinem Problem:

Ich kann mich per Browser auf der Seite einloggen, erhalte dann auch einen Cookie usw. (is klar denke ich). Und wie, verdammt noch mal *langsam verzweifel* bringe ich diesem Programm jetzt bei das es genau diesen Cookie verwenden soll wenn es die connection zu der Seite aufbaut!?!? Kann ich den Cookie irgendwie von Firefox (der ihn ja kennt) verwenden?


----------



## Campino (29. Jul 2005)

the_chaox hat gesagt.:
			
		

> Ich kann mich per Browser auf der Seite einloggen, erhalte dann auch einen Cookie usw. (is klar denke ich). Und wie, verdammt noch mal *langsam verzweifel* bringe ich diesem Programm jetzt bei das es genau diesen Cookie verwenden soll wenn es die connection zu der Seite aufbaut!?!? Kann ich den Cookie irgendwie von Firefox (der ihn ja kennt) verwenden?



geht es wirklich um einen Keks (engl. Cookie) oder musst du POST-Daten an ein Script senden (was Firefox z.B. beim Ausfüllen eines Formulars machen würde)?


----------



## the_chaox (29. Jul 2005)

Nein, es geht eindeutig um einen "Keks"!

Das Problem ist ja, das die Seite denkt ich wäre nicht eingeloggt, also nicht berechtigt die Seite zu betreten! Unter Firefox bin ich berechtigt da ich ja eingeloggt bin und den entsprechenden Cookie also habe! Also muß ich diesen Cookie irgendwie beim Request von dem Programm an die Seite verwenden!  ???:L


----------



## Campino (29. Jul 2005)

the_chaox hat gesagt.:
			
		

> Nein, es geht eindeutig um einen "Keks"!
> 
> Das Problem ist ja, das die Seite denkt ich wäre nicht eingeloggt, also nicht berechtigt die Seite zu betreten! Unter Firefox bin ich berechtigt da ich ja eingeloggt bin und den entsprechenden Cookie also habe! Also muß ich diesen Cookie irgendwie beim Request von dem Programm an die Seite verwenden!  ???:L


bist du dir sicher das die Seite mit einem Keks und nicht mit einer session arbeitet?

Ansonsten sieh dir auch mal jakarta (Link oben) an, die haben ein Object Cookie, das man zu einem PostMethod-Object hinzufügen kann und dieses kann man dann an den Server senden...übertragen werden die daten so...nur wie man an die resultierende page kommt, weiß ich nicht...das ist derzeit mein Problem...


----------



## Bleiglanz (30. Jul 2005)

```
BufferedReader br =
       new BufferedReader(
           new InputStreamReader(
               new URL(urlString).openStream())); /// WIESO NEW???
```
Warum machst du da eine neue URL auf? klar dass du da nicht eingeloggd bist

=> nimm doch die, die du schon hast und an die du den cookie geschickt hast...


----------



## the_chaox (30. Jul 2005)

:bae: Ok, da haste recht, so ist logischer:


```
BufferedReader br = 
       new BufferedReader(
           new InputStreamReader(
               url.openStream()));
```

Ändert aber leider nichts am meinem Problem, da der Cookie dem Programm immernoch nicht bekannt ist!


----------



## Bleiglanz (31. Jul 2005)

hmm

du liest also beim ersten mal den Cookie aus

und dann musst du eine komplett neue Anfrage stellen, mit der du eben diesen wieder mitschickts

=> einfach im Header


----------



## Fry (31. Jul 2005)

Hallo!



> Das öffnen eines Stream über die verwendete UrlConnection gibt eine andere Seite aus...



 :lol:  :lol: hehe wir arbeiten wirklich am selben 
Also bei mir ist es so, dass die Seite, die ich abgreife eine Seite ist, die als HTML text lediglich ein framesetz enthält. Bei mir ist es also auch eine andere  :roll: 

Fry


----------

