# website auslesen schlägt fehl



## s_poggie (25. Mrz 2010)

Hi Jungs, 
vielleicht könnt ihr mir bei einer sache weiter helfen bei der ich gerade ein wenig hänge. 
Seit kurzem hat mtv wohl ne mtv mobile seite hinzugefügt. 
da vermute ich nun mein Problem 
ok folgender Sourcecode soll die Website die er bekommt auslesen und in einer Datei speichern. 
z.B: :: MTV | Deutsche Dance Charts | charts

Seitenquelltext mit Firefox sagt: 


```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="de" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>:: MTV | Deutsche Dance Charts | charts</title>
<link rel="meta" href="http://www.mtv.de/labels.rdf" type="application/rdf+xml" title="ICRA labels" />
```


Mein Sourcecode: 


```
/**
	 * 
	 * @param req
	 *            URL der auszuwertenden Seite
	 * @param dateisp
	 *            Pfad der Datei
	 * @param neu
	 *            append oder write modus
	 * @return
	 * @throws Exception
	 */

	/*Bekommt URL [url=http://www.mtv.de]:: MTV | home[/url].......
	 * bekommt dateisp für dateinamen!!!(outgain.txt)
	 * soll hinterher in outgain.txt den inhalt der gesammten website
	 * schreiben!!!
	 * 
	 */

	public static boolean get(String req, String dateisp, boolean neu)
			throws Exception {

		if (dateisp.length() == 0) {
			return false;
		}

		String line = new String();// One line as reading buffer
		URL adr = new URL(req);
		adr.openConnection();// establish connection to url
		InputStream inp = adr.openStream();
		BufferedReader buff = new BufferedReader(new InputStreamReader(inp));// make
		// //
		// inputstream
		StringBuffer buffer = new StringBuffer();

		while ((line = buff.readLine()) != null) {// read the stream...
			buffer.append(line);
			buffer.append("\r\n");
		}

		System.err.println(buffer.toString());//ausgabe html auf console

		try {

			if (neu == true) {
				// write Modus
				File outputFile = new File(dateisp);
				FileWriter out = new FileWriter(outputFile);
				out.write(buffer.toString());// schreibe datei!!!
				out.close();
				outputFile.deleteOnExit();

			} else {
				// append Modus
				FileWriter out = new FileWriter(dateisp, true);
				out.append(buffer.toString());// schreibe datei!!!
				out.close();
				

			}

		} catch (Exception e) {
			System.err
					.println("File IO Problem " + dateisp + " nicht erstellt");
		}

		return true;

	}
```


```
Meine Ausgabe: 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.openwave.com/dtd/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- Sevenval FITML 3 Processor 6.1.29  --><!--TradeDoubler site verification 1658888--><head><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/><title>MTV</title><style type="text/css"> .headersearchinput ....
    Â*
```


Der Code hat bis vor ein paar wochen einwandfrei funktioniert. Nun vermute ich aber das die Website dem Java Prog etwas anders liefert als mein Firefox bekommt. kann das sein? 
Wie kann man das ändern? 
Einer ne Ideeeeeeee? 


Danke


----------



## tuxedo (25. Mrz 2010)

s_poggie hat gesagt.:


> Nun vermute ich aber das die Website dem Java Prog etwas anders liefert als mein Firefox bekommt. kann das sein?



Klar kann das sein. Warum druckst du nicht einfach das, was du von der URL als Quelltextliest mal auf der Console raus und schaust dir den Inhalt an?!


----------



## Atze (25. Mrz 2010)

das problem ist wohl, dass es nicht eine statische website ist, sondern dynamisch aus vielen teilen zusammengesetzt wird. du müsstest praktisch jedem "link" folgen, dir die inhalte holen und wieder zusammenbauen, also mehrere anfragen abschicken, so wie dein browser es auch tut.

nebenbei, zeilen 29 und 51 finde ich merkwürdig. 29 ist sinnlos, und warum löscht du die datei in 51 wieder?


----------



## musiKk (25. Mrz 2010)

In diesem Fall ist es wie so oft: Der User-Agent fehlt. Und wie ebenfalls oft reicht ein einfaches

```
URLConnection urlc = url.openConnection();
urlc.addRequestProperty("User-Agent", "firefox");
InputStream is = urlc.getInputStream()
```



Atze hat gesagt.:


> das problem ist wohl, dass es nicht eine statische website ist, sondern dynamisch aus vielen teilen zusammengesetzt wird. du müsstest praktisch jedem "link" folgen, dir die inhalte holen und wieder zusammenbauen, also mehrere anfragen abschicken, so wie dein browser es auch tut.


Äh, ne. Dynamisch erzeugte Seiten werden auf dem Server zusammengebaut. Der Seitenquelltext ist in einem Stück. Mehrere Anfragen braucht man nur, um z. B. Bilder oder Skripte zu laden.



> und warum löscht du die datei in 51 wieder?


[c]deleteOnExit()[/c] sagt nur, dass die Datei beim Beenden der JVM gelöscht werden soll, nicht sofort.


----------



## Atze (25. Mrz 2010)

musiKk hat gesagt.:


> Äh, ne. Dynamisch erzeugte Seiten werden auf dem Server zusammengebaut. Der Seitenquelltext ist in einem Stück. Mehrere Anfragen braucht man nur, um z. B. Bilder oder Skripte zu laden.


davon red ich doch  da die meisten seite aber zZ nur aus flash und bildergemetzel bestehen, sind es meist mehrere anfragen


> [c]deleteOnExit()[/c] sagt nur, dass die Datei beim Beenden der JVM gelöscht werden soll, nicht sofort.



stimmt


----------



## s_poggie (27. Mrz 2010)

Hi musiKk

deine Lösung hört sich ganz Plausibel an...die werde ich gleich mal ausprobieren. 
Ich habe mir den Code nicht nochmal angeschaut... war froh als es lief.  das gesamte prog setzt sich aus vielen kleinen Baustellen zusammen und es kommt überhaupt nicht auf Performance an. Daher ist mir das egal ob da noch nen paar Codereste von irgendwelchen Tests drin sind die nicht sein müssen. 

Vielen Dank für die vielen Antworten. 

PS: Wenn ihr nen bisschen weiter denkt wisst ihr ja vielleicht was ich mit den Daten von MTV vor habe.
Funktioniert echt super.... mein Prog erstellt zum schluss eine Datei in der die dazugehörigen Youtube links drin stehen....eigentlich echt nützlich. 

Grüße 
Sascha


----------



## s_poggie (27. Mrz 2010)

Top Sache
schon wieder was dazugelernt. Danke


----------



## ts.tsogoo (18. Aug 2010)

Hi Leute, ich habe ein Problemm. Ich hatte ein code geschrieben, der eine Websiteninhalt ausliesst und weiterbenutzt. Es lief bis sie meine IP Adresse blockiert haben. 


```
URL url = new URL("http://www.beispielSite.de");
			URLConnection con = url.openConnection();
			con.setRequestProperty("User-Agent",
					"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; H010818)");
			br = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF8"));
...
```
Wie kann ich dieses Problemm lösen. Kann ich bei setRequestProperty bestimmte IP adresse angeben?


----------



## ARadauer (18. Aug 2010)

> Äh, ne. Dynamisch erzeugte Seiten werden auf dem Server zusammengebaut. Der Seitenquelltext ist in einem Stück. Mehrere Anfragen braucht man nur, um z. B. Bilder oder Skripte zu laden.


ichi sags mal trendy: Auf das kann man sich seit WEB 2.0 Zeiten auch nicht mehr verlassen ;-) Im Grunde kann alles über JavaScript und Ajax nachgeladen und verändert werden. Ich baue einige meiner Seiten am Client zusammen...


----------



## tuxedo (18. Aug 2010)

@ts.tsogoo

Hast du ne statische IP? Die meisten DSL Nutzer bekommen nach 24h ne neue IP, bedingt durch die Zwangstrennung. 

Wenn du keine statische IP hast, dann kann die die IP-Adressblockade ja egal sein. 
Falls doch: Tja, IP ändern. Da hilft es nix im Request Daten zu manipulieren. Der Firewall ist das so ziemlich egal. 

- Alex


----------



## ts.tsogoo (18. Aug 2010)

tuxedo hat gesagt.:


> @ts.tsogoo
> 
> Hast du ne statische IP? Die meisten DSL Nutzer bekommen nach 24h ne neue IP, bedingt durch die Zwangstrennung.
> 
> ...



Es ist eine root server mit ein feste IP.


----------



## tuxedo (18. Aug 2010)

Tja, dann hast du ein Problem. 

Wenn du deren Webseite zu sehr stresst, kann man deren Reaktion natürlich verstehen. 

Was willst du denn von der Webseite lesen, und vor allem: In welchen Abständen?

- Alex


----------



## ts.tsogoo (18. Aug 2010)

tuxedo hat gesagt.:


> Tja, dann hast du ein Problem.
> 
> Wenn du deren Webseite zu sehr stresst, kann man deren Reaktion natürlich verstehen.
> 
> ...



Eigentlich nur ne Wechselskurs (Mongolische Tugrug  to anderen ($,€...))


----------



## tuxedo (18. Aug 2010)

Das was ist weniger wichtig als das "wie oft" ...Das hast du komplett außen vor gelassen ...

Wieviel Requests machst du denn da Pro Minute oder Sekunde?

- Alex


----------



## ts.tsogoo (18. Aug 2010)

tuxedo hat gesagt.:


> Das was ist weniger wichtig als das "wie oft" ...Das hast du komplett außen vor gelassen ...
> 
> Wieviel Requests machst du denn da Pro Minute oder Sekunde?
> 
> - Alex



Naja es ist bisschen kompliziertes als es scheint. Es ist Website von einer staatlicher bank, derren administrator mein damalige Freund (jetzt gegner) ist. Der weiss was das für mein Programm bedeutet. 
Ich mache eigentlich nur 60 request am tag.


----------



## Atze (18. Aug 2010)

wahrscheinlich bist du der einzige, der da so oft drauf ist, vielleicht sogar der einzige überhaupt!  dann weiß er wohl immer wer du bist, auch wenn du mit ner neuen ip requestest. also wenn du sein "gegner" bist (was auch immer das heißen mag oO), dann hat er wohl seine gründe dich dort auszusperren. musst du seine seite denn nutzen? gibt es keine alternativen? hört sich nach ner moralisch nicht ganz korrekten sache an, die du da vor hast! kampf um die neusten wechselkurse?


----------



## ts.tsogoo (29. Aug 2010)

Was ich vorhabe ist egal. Die Sache is nur, ob man die IP Adress von ein windows server 2008 bei java app aendern kann. Wenn man duch rooter die IP adresse neu kriegen kann, dann musste man das ohne rooten koennen. Denke ich. Geht nicht gibt es nicht oder? Ich dachte diese Thema ist nicht new. Gibt es keine Trick?


----------



## tuxedo (30. Aug 2010)

Nicht denken. Wissen!

Proxy oder andere Webseite. Ne andere Wahl hast du bei einer statischen IP nicht. 

- Alex


----------



## ts.tsogoo (30. Aug 2010)

tuxedo hat gesagt.:


> Nicht denken. Wissen!
> 
> Proxy oder andere Webseite. Ne andere Wahl hast du bei einer statischen IP nicht.
> 
> - Alex



Danke Alex. Proxy. Es ist schon mal was. Ich hatte 
	
	
	
	





```
//		System.getProperties().setProperty("http.proxySet", "true");
//		System.getProperties().setProperty("http.proxyHost",
//				"www-9j.dienste.mywebsite.de");
//		System.getProperties().setProperty("http.proxyPort", "8080");
```

so was schon mal bei meiner Arbeit's PC benutzt. Die frage ist, wie soll ich das  auf meinen Root server?


----------



## tuxedo (30. Aug 2010)

Du weißt aber schon was ein Proxy ist und wie er funktioniert?

Dein Root-Server kann wie jeder andere Rechner/PC http-Verbindungen über einen Proxy aufbauen. Alles was du brauchst ist eine Anwendung der man Proxy-Einstellungen verpassen kann (was bei einer Java-Anwendung r- die die Http-/Url-Klassen nutzt - über die "http.xyz" System-Properties kein Problem sein sollte), und natürlich einen Proxy der a) public ist und b) der von deinem Root-Server aus erreichbar ist.

Viel mehr kann ich dazu nicht sagen. Ist eigentlich ziemlich trivial... Ansonsten: :rtfm: rtfm ...


----------



## ts.tsogoo (31. Aug 2010)

tuxedo hat gesagt.:


> Du weißt aber schon was ein Proxy ist und wie er funktioniert?
> 
> Dein Root-Server kann wie jeder andere Rechner/PC http-Verbindungen über einen Proxy aufbauen. Alles was du brauchst ist eine Anwendung der man Proxy-Einstellungen verpassen kann (was bei einer Java-Anwendung r- die die Http-/Url-Klassen nutzt - über die "http.xyz" System-Properties kein Problem sein sollte), und natürlich einen Proxy der a) public ist und b) der von deinem Root-Server aus erreichbar ist.
> 
> Viel mehr kann ich dazu nicht sagen. Ist eigentlich ziemlich trivial... Ansonsten: :rtfm: rtfm ...



danke dir,


----------

