Thread Linux perl script soll Standard Werte in HTML-Seite 'eingeben'
(2 answers)
Opened by OlliP at 2020-08-21 18:35
Guten Abend OlliP,
Klar geht das mit Perl auch. Das fiktive Beispiel folgt. Du musst das Feld, die URL und die Eingabedatei anpassen. Nehmen wir an das Feld der Website heißt Ware und die URL zum Einkaufen http://exammppl.ork/shop/kaufmich und die Seite nimmt alles per POST entgegen. Nehmen wir an dies sei die Eingabedatei (=Einkaufsliste) names grillparttyliste: Code: (dl
)
1 30 Bratwürste und du nutzt dieses Programm namens koofmich um Senden and diese o.g. Seite: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 use 5.010; use strict; use warnings; use utf8; use Getopt::Long; use LWP::UserAgent (); # ------------- konfigurierbar -------------------------- my $url = "http://exammppl.ork/shop/kaufmich"; # URL an die gesendet wird my $field_name_1 = 'Ware'; # Feld des Formulars, das gefüllt wird # ------------------------------------------------------- my $filename = ""; my $verbose = 0; # Optionen der Kommandozeile einlesen GetOptions ("file=s" => \$filename, # string ) or die("Fehler in Argumenten der Kommandozeile\n"); my $fh; if (not open($fh, "<", "$filename") ) { # Datei öffnen die "Fehler: Datei '$filename' kann nicht zum Lesen geöffnet werden: $!\n"; } my @nochmals_bestellen = (); # für die Zeilen zu senden die nicht geklappt haben my $ua = LWP::UserAgent->new(timeout => 10); # WWW-Client zum Ansenden erzeugen my @lines = <$fh>; # Einkaufsliste aus Datei einlesen EINKAUFEN: while (scalar @lines) { # aus Einkaufsliste einlesen solange was drin ist $line = shift @lines; # Eine Zeile aus der Liste holen chomp $line; # Unnötiges Zeilenende aus Zeichenkette raus nehmen my $value = $line; # In ein Variable für später zum Absenden speichern my $res = $ua->post( $url, $field_name_1 => $value ); # nun den Wert zwecks Bestellung an Seite absenden # Prüfen, obs geklappt hat if ($res->is_success) { # wenn alles ok nach dem Senden, dann say "Yihaaa! Einkauf von $line getaetigt"; # zeige Fortschritt } else { push @nochmals_bestellen, $line; # was nicht gesendet werden konnte merken say "Upps! Einkauf von $line nicht geklappt"; # zeige welcher Einkauf nicht klappte warn $res->status_line, "\n"; # schimpfe den Fehler raus, den der server zurück hab } } if (scalar @nochmals_bestellen) { @lines = @nochmals_bestellen; @nochmals_bestellen = (); goto EINKAUFEN; } dann kannst du so "einkaufen": koofmich -f ./grillparttyliste Notfalls hier weider fragen. Natürlich ist das so noch nicht extrem fehlertolerant. Und es geht garantiert eleganter. Jede und jeder macht es anders. Ich habs versucht auf die Schnell mal hin zu schreiben. Alles ungetestet. Die Hitze mit 32°C im Zimmer gerade. Also ohne Gewähr und Garantie. Und es ist ja zum Lernen für dich. Du wirst ja sowas erst mal auf deinem lokalen Server ausprobieren, oder? Nicht einfach so auf irgendeinen Server loslassen! Last edited: 2020-08-21 20:53:44 +0200 (CEST) |