PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Webseite mit Java herunterladen



SeeksTheMoon
15-12-2002, 19:52
Hallo!

Was muss ich machen, um eine html-Seite aus dem Internet runterzuladen.
Ich will sie nachher nur durchsuchen, brauche sie also nicht anzuzeigen.
Am besten ist wohl, das Ding direkt in einen Filestream zu schicken, oder?
Im folgenden hab ich mal geschrieben, wie ich die Verbindung herstelle, aber weiter weiß ich nicht. Wie gehts weiter? Die Webseite wird übrigens durch ein CGI erzeugt, das also erstmal angeschmissen werden muss. Reicht dazu ein einfacher connect, wie ich ihn habe aus?



private URL url;
private HttpURLConnection connect;

public void downloadl() {

try {
url = new URL("http://webseite.php3?parameter=x");
connect = (HttpURLConnection)url.openConnection();
connect.setDefaultUseCaches(false);
connect.setFollowRedirects(true);
connect.connect();
} catch (Exception ex) {
System.err.println(ex.getMessage());
}
}

SeeksTheMoon
16-12-2002, 12:08
wie kann ich denn so einem cgi sagen, welcher Browser ich (angeblich) bin?
Das Apachelog sagt folgendes:

127.0.0.1 - - [16/Dec/2002:13:14:16 +0100] "GET / HTTP/1.1" 200 5420 "-" "Java/1.4.1_01"

als Browser sagt er Java/1.4.1_01, das muss man doch ändern können, oder?

Und wie kann ich den Referrer angeben, der hier mit "-" bezeichnet ist?

Der Abschnitt mit dem GET sollte vor dem HTTP1.1 noch die angeforderte Datei beinhalten (ein simpler connect reicht also nicht)

anda_skoa
16-12-2002, 12:43
Original geschrieben von SeeksTheMoon
wie kann ich denn so einem cgi sagen, welcher Browser ich (angeblich) bin?
Das Apachelog sagt folgendes:


Hmm, vielleicht mit setRequestProperty.
Aber das ist ja eigentlich egal, oder.



Und wie kann ich den Referrer angeben, der hier mit "-" bezeichnet ist?


Wozu?



Der Abschnitt mit dem GET sollte vor dem HTTP1.1 noch die angeforderte Datei beinhalten (ein simpler connect reicht also nicht)

Der gepostet request enthält auch die angeforderte Datei, er wäre sonst kien gültiger GET Request.
Das steht GET /

Um eine Datei runter zu laden reicht normalerweise


URL url = new URL("http://server/datei");
InputStream in = url.openStream();


Wenn du mit einer URL connection arbeitest, bekommst du den InputStream mit
URLConnection.getInputStream()

Ciao,
_

SeeksTheMoon
16-12-2002, 14:37
ok, das geht tatsächlich alles mit dem setRequestProperty.

connect.setRequestProperty("User-Agent","Mozilla/5.0 (compatible; Konqueror/3;Linux)");
connect.setRequestProperty("Referer", "http://adresse.gibts.net");

Leider ist die Java-API nicht sehr verschwenderisch mit Beschreibungen für diese Methode und die ganzen Properties hab ich auch erst rausbekommen, nachdem ich das http-rfc und den Quellcode vom XBrowser durchgewälzt habe.

Mit dem Dateidownload das probier ich noch aus, danke schonmal.

Was ich aber noch nicht ganz rausbekommen habe:
Das Default-Request ist laut API GET, ich brauche also setRequestMethod("GET"); nicht zu setzen, richtig? Und sobald ich connect() sage, führt er ein GET auf die vorher erzeugte url (http://webseite.php3?parameter=x) aus und löst damit das in der URL enthaltene CGI-Script aus, richtig?

anda_skoa
16-12-2002, 15:14
Original geschrieben von SeeksTheMoon
ok, das geht tatsächlich alles mit dem setRequestProperty.

connect.setRequestProperty("User-Agent","Mozilla/5.0 (compatible; Konqueror/3;Linux)");
connect.setRequestProperty("Referer", "http://adresse.gibts.net");


Ah, cool, richtig getippt :)



Leider ist die Java-API nicht sehr verschwenderisch mit Beschreibungen für diese Methode und die ganzen Properties hab ich auch erst rausbekommen, nachdem ich das http-rfc und den Quellcode vom XBrowser durchgewälzt habe.


Selbes Problem gibt es auch bei den System Properties.
Das könnten die langsam mal in die Doku schreiben.



Was ich aber noch nicht ganz rausbekommen habe:
Das Default-Request ist laut API GET, ich brauche also setRequestMethod("GET"); nicht zu setzen, richtig?


Denke ja.



Und sobald ich connect() sage, führt er ein GET auf die vorher erzeugte url (http://webseite.php3?parameter=x) aus und löst damit das in der URL enthaltene CGI-Script aus, richtig?

Ja, soltle so gehen.
Allerding ist deine URL ungültig.

Ciao,
_

SeeksTheMoon
18-12-2002, 09:07
warum ist die ungültig?
OK, das ist jetzt ne Dummy-URL, aber die tatsächliche URL ist genauso aufgebaut. Ist halt ne URL mit angehängten Parametern, der Aufruf sollte also klappen.

anda_skoa
18-12-2002, 12:05
Nach einem // kommt in einer URL ein Hostname oder eine Hostadresse.

Ich denke ? ist kein gültiger Bestandteil eines Hostnamens.

Ciao,
_

SeeksTheMoon
18-12-2002, 18:00
Das ? ist eine Parameterübergabe über die URL (=GET), so wie es auch hier beim Board verwendet wird, wenn man was neues postet, wie z.B. der Link für das, was ich gerade schreibe:


http://www.mrunix.de/forums/newreply.php?s=&action=newreply&postid=131408

Das ? trennt ja url von Parametern und die einzelnen Parameter werden über & getrennt.
Meine original-url ist eigentlich auch so aufgebaut (ich habs zum Posten halt abgekürzt)

anda_skoa
18-12-2002, 22:28
Ja, aber nach dem // kommt der Host, nach einem weiteren / ein Pfad bzw eine Datei.

Ich glaube nicht, dass ? ein gültiger Teil eine Hostnamens ist und php3 ist auch einen gültige Topleveldomain.

Ciao,
_

Gaert
19-12-2002, 10:37
:D Warum nich... php3 wär doch mal ne geile TLD...

SeeksTheMoon
19-12-2002, 13:36
nein nein, die Adresse ist schon korrekt:

http://www.hostadresse.de/cgi-bin/script.php3?Parameter=bla

xmarvel
19-12-2002, 14:07
also ich weiss jetzt nicht ob dein Problem gelöst wurde, wenn nicht dann schau dir mal die Libary an: http://curl.haxx.se/libcurl/
Ist eigentlich genau was du suchst.

anda_skoa
20-12-2002, 08:24
Original geschrieben von SeeksTheMoon
nein nein, die Adresse ist schon korrekt:

http://www.hostadresse.de/cgi-bin/script.php3?Parameter=bla

Ja, die ist schon korrekt, da ist ja auch ein ? im Hostnamen :)

Ciao,
_