Thread Linux perl script soll Standard Werte in HTML-Seite 'eingeben' (2 answers)
Opened by OlliP at 2020-08-21 18:35

GwenDragon
 2020-08-21 20:20
#192492 #192492
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
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
2
3
4
5
6
7
8
9
30 Bratwürste
10 Schaschlik
10 kg Grillkohle
20 Liter Fassbier
10 Dosen Cola ExtraLight
1 Flasche Knurr Chilisoße
8 Zucchini
4 Paprika rot
10 Baguettes


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)

View full thread Linux perl script soll Standard Werte in HTML-Seite 'eingeben'