mit perl auf websiten zugreifen

D

d3f3nd3r

Mitglied
heo

ich würde gerne ein perl skript schreiben, dass daten einer webseite auswertet (und diese auch automatisch herunterlädt!)

leider habe ich keine ahnung wie ich das realisieren könnt, hat jemand tipps?

mfg
 
Mit dem Perl-Modul 'WWW::Mechanize' ist das ziemlich einfach. Findest du bei CPAN recht gut dokumentiert. Kleines Beispiel:

Code:
use WWW::Mechanize; # Modul benutzen

# die URL, die wir bearbeiten wollen
my $url = "http://www.meinserver.tld/";

# Mechanize-Instanz erstellen
my $mech = WWW::Mechanize->new();

# Seite der URL einlesen
$mech->get($url);

# Inhalt der Seite in eine Variable packen
my $content = $mech->content();

# Inhalt in ein Array packen
my @lines = split(/\n/, $content);

foreach my $line (@lines) {
  # mach irgendwas mit $line
}

Selbst Formulare ausfüllen ist total simpel:

Code:
use WWW::Mechanize; # Modul benutzen

# die URL, die wir bearbeiten wollen
my $url = "http://www.meinserver.tld/";

# Mechanize-Instanz erstellen
my $mech = WWW::Mechanize->new();

# Seite der URL einlesen
$mech->get($url);

# Formular ausfuellen und absenden
$mech->submit_form(form_number => 1, # eine Seite kann ja mehrere form-Tags haben
    fields => {
        namevonfeld1 => 'wertdenwireintragenwollen1',
        namevonfeld2 => 'wertdenwireintragenwollen2'
    });
my $content = $mech->content; # ergebnis nach dem absenden des formulars holen
...
 
ja danke WWW::Mechanize hat toll funktioniert.

Jetzt nur noch eine Frage, hat jemand Erfahrung, mit Skripten, die sich auf einer HP anmelden? Gibt es da etwas zu beachten?

mfg
 
@d3f3nd3r wieso nicht wget???
Code:
wget http://www.example.de/login.php --post-data 'user=USERNAME&password=PASSWORD'
 
Weils so weit möglich zu vermeiden ist externe Tools aufzurufen? (Performanz, Sicherheit, Shell Escaping, Umwandeln/Parsen der Ausgabe)
 
ja ich würde den vorher vorgestellten mechanismus auch auf webseiten anwenden, bei denen man sich zuerst anmelden muss...
 
Ich habe WWW::Mechanize auch schon für Anmeldungen benutzt. Einfach mittels des oben genannten Mechanismus das Login-Formular ausfüllen und dir den neuen Content holen.
 
Zuletzt bearbeitet:
ja aber das problem ist, ich möchte nicht nur die seite nach dem login sehen, da würde ich so etwas wie sessionmanagement benötigen und da wäre es intressant wie man das mit perl realisiert...

mfg
 
Dann schau dir mal WWW::Kontent::Session an. Das dürfte für ein ganz einfaches Session-Handling reichen, denke ich. Alternativ greifst du auf die Funktionalitäten des CGI-Moduls zurück.
 
ja aber das schaut mir ja serverseitig aus.
normalerweise kenne ich ja die session id nicht, bzw wie kann ich die benötigten parameter bekommen?

(es geht um einen mediawiki bot)
 
Benutze LWP::UserAgent und gib ihm ein Cookie Jar. Damit hast du Sessions, die per Cookie kommen erledigt. Für alle anderen Arten von Sessions musst du dir wohl anschauen, wie diese auf der Seite realisiert werden. Da es keinen Standard per se gibt, sieht das schlecht aus. Meistverwendet werden angehängte URL Parameter (Bsp.: index.html?s=43597834509234590354 ), Cookies oder unsichtbare Formulare die die Session ID beim POST mitsenden.
 
also ich arbeite jetzt gerade mit LWP::UserAgent.
Nur eine Frage: Wie fülle ich Formulare richtig aus?

Das fragliche Formular hat zwei intressante Eingabefelder (aber auch noch 2 unwichtige), nämlich wpName und wpPassword. Das Ziel des Formulars (action=..) ist /infopedia/index.php?title=Spezial:Anmelden&action=submitlogin&type=login.

Ich hab mir gedacht, ich schicke mit POST einfach die zwei Felder rüber aber das hat nicht funktioniert....

hier mein code :
require LWP::UserAgent;
use HTTP::Cookies;

$cookie_jar = HTTP::Cookies->new(
file => "$ENV{'HOME'}/lwp_cookies.dat",
autosave => 1,
);
my $ua = LWP::UserAgent->new;

$ua->cookie_jar($cookie_jar);

my %login = ("wpName" => "d3f3nd3r",
"wpPassword" => "passs");

my $url = "http://foo.com/infopedia/index.php?title=Spezial:Anmelden&action=submitlogin&type=login";

my $response = $ua->post($url,%login);

jemand eine Idee wie ich einfach das Formular ausfüllen kann (in WWW::Mechanize Art...) ?
 
[strike]Einfach in die Doku von LWP::UserAgent gucken??[/strike]

Sorry, hatte nicht ganz gelesen, genauso wie du's geschrieben hast hätte ich es auch erwartet. Eventuell kannst du ja mal das ganze auf ein Test PHP Skript loslaufen lassen und dir anzeigen lassen, was ankommt?

EDIT: Poste mal bitte die HTML Quelle des Login Formulars
 
Zuletzt bearbeitet:

Ähnliche Themen

CRON - Karnevalistische Lösung des Datums

Unix Webserver mit HTML Seite erstellen

Shell: Funktion ls Not found

Server und Client für TCP und UDP

GNOME Keyring / Seahorse - ed25519 automatisch entsperren

Zurück
Oben