Thread POST direkt auslesen ohne Formular
(32 answers)
Opened by dater at 2010-02-10 15:55
1) Auch hier ist der Code nicht vollständig, in deinem beispiel schickst du nichts ab, sondern du erstellst nur ein Request. Für das Absenden fehlt noch ein
Code: (dl
)
$ua->request($req) 2) In deinem Fall solltest du einen weiteren Content-Type angeben. Komplett fertig sieht das dann so aus. Code: (dl
)
1 #!/usr/bin/env perl 3) Wenn du das machst dann kannst du in deinem CGI Skript die gesendeteten daten über Code: (dl
)
$q->param('POSTDATA') Code: (dl
)
my $input = $q->param('POSTDATA') Ich habe dein CGI Skript mal angepasst so das es überhaupt lauffähig ist. 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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 #!/usr/bin/env perl use CGI; print "Content-type: text/html\n\n"; my $q = new CGI; #TODO #Timeout verhindern #Gültige URL Parameter my $strPARTNERID_valid ="BECHTLE"; my $strPWD_valid = "TEST"; #----------------------------------------------------- #Umgebungsvariablen - bei Bedarf zum Testen # #$ENV{CONTENT_LENGTH}; # #---------------------------------------------------- my @params = split(/&/,$ENV{QUERY_STRING}); foreach (@params){ ($key, $val) = split (/=/,$_); $param{$key} = $val; }; #Datenablage - in diesem Verzeichnis werden die Daten gespeichert my $strDataPath = "/srv/www/webshop1/web888w/dattrans/backup_bechtle_orderresponse/"; #Eindeutiger Dateiname inkl. Pfad bilden aus Timestamp + Zufallszahl z.B.: /srv/www/webshop1/web888w/dattrans/backup_bechtle_order/20100209_345.xml my $strTimeStamp = myCurrentDate().time(); #Randomize my $strDateiname = $strDataPath.$strTimeStamp."_".int(rand()*1000).".xml"; #Uebergebene URL Parameter ueberpruefen my $strPARTNERID = $param{PARTNERID}; if (length($strPARTNERID)>0 and ($strPARTNERID eq $strPARTNERID_valid)){ warn "Alles OK - PARTNERID ist gueltig"; } else{ #in Datei loggen #Remote-Adresse,strPARTNERID #Response.Status = "401 Unauthorized" } my $strPWD = $param{PWD}; if(length($strPWD)>0 and ($strPWD eq $strPWD_valid)>0){ warn "Alles OK -PWD gültig"; } else{ #in Datei loggen #Remote-Adresse,strPWD #Response.Status = "400"; } #Daten auslesen my $strData = ""; my $totalBytes; my $input = $q->param('POSTDATA'); warn "INPUT: ", $q->param('POSTDATA'), "\n"; print $q->header('text/html'); print $input; sub myCurrentDate { use DateTime; return DateTime->today->dmy('.'); } 1) Du solltest meine obengenannte Punkte aber noch selber einbauen 2) "use strict;" und "use warnings;" nicht vergessen! Wenn du dann den Request abfeuerst bekommst man als ausgabe vom CGI im Error Log. Code: (dl
)
1 Alles OK - PARTNERID ist gueltig at /usr/lib/cgi-bin/test.pl line 52. Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
|