print "Location: $errorurl... || die und zu sleep(1)
Alain
- perl
Morgen,
Ich habe ein perl cgi script geschrieben,dass bei fehler auf ein anderes
perl script zeigt.Nun meine frage dazu kann man falls die anfrage vom client
abnormal (spider z.B.) zum script erfolgt die location auch so schreiben
print "Location: $errorurl\n\n" || die("401 error 8\n");
?
Weiter wollte ich wissen für was sleep(1); gut sein soll?
Ich habe mir dabei gedacht,dass es eventuell nützen würde,wenn jemand mit einem spider
versucht ein perl script bzw. den server zu überfordern mit 100e von requests pro sekunde und
das script mit sleep die requests auf ein request je sekunde verzögert anstatt 100 pro sekunde.
Dem ist aber leider nicht so,für was soll dann sleep(1) gut sein?
Gruss
Alain
Hi,
falls die anfrage vom client
abnormal (spider z.B.) zum script erfolgt
was ist daran abnormal? Sprich: Wie definierst Du diesen Begriff?
print "Location: $errorurl\n\n" || die("401 error 8\n");
Vom falschen Umbruch und dem sinnfreien Listenkontext abgesehen ist das korrekt: die
wird ausgeführt, wenn der print-Befehl fehlschlägt. Nach letzter Zählung dürfte das also nie sein. Was ist eigentlich Dein Ziel?
Weiter wollte ich wissen für was sleep(1); gut sein soll?
Siehe perldoc -f sleep
Ich habe mir dabei gedacht,dass es eventuell nützen würde,wenn jemand mit einem spider
versucht ein perl script bzw. den server zu überfordern mit 100e von requests pro sekunde und
das script mit sleep die requests auf ein request je sekunde verzögert anstatt 100 pro sekunde.
Nein, denn es existiert kein Weg, diesen Spider zu erkennen. Wesentlich effektiver ist hier ein Anwalt.
Dem ist aber leider nicht so,für was soll dann sleep(1) gut sein?
Im CGI-Kontext? Für die Durchführung groben Unfugs.
Cheatah
Hallo,
falls die anfrage vom client
abnormal (spider z.B.) zum script erfolgtwas ist daran abnormal? Sprich: Wie definierst Du diesen Begriff?
wenn der spider z.B. keinen header besitzt bzw. weder get noch post sendet.
print "Location: $errorurl\n\n" || die("401 error 8\n");
Vom falschen Umbruch und dem sinnfreien Listenkontext abgesehen ist das korrekt:
die
wird ausgeführt, wenn der print-Befehl fehlschlägt. Nach letzter Zählung dürfte das also nie sein. Was ist eigentlich Dein Ziel?
was meinst Du mit falschem umbruch? - mein script läuft im use strict modus. mein ziehl ist,wenn das script dem client die location nicht senden kann,dann soll es den weitern vorgang beenden.
gruss
Alain
Hi,
wenn der spider z.B. keinen header besitzt bzw. weder get noch post sendet.
Du scheinst mir ein wenig konzeptfrei zu sein. _Kein_ Client "besitzt einen Header". Bei Deinem Server kommt ein Request an - und der hat unter Garantie eine Methode, welche zumeist GET oder POSt ist.
was meinst Du mit falschem umbruch?
Du sendest nur Linefeeds, keine Carriage Returns.
mein script läuft im use strict modus.
Perl merkt nichts von defektem HTTP. Es würde auch nicht meckern, wenn Du im Location-Header eine relative URI angbibst, obwohl etwas anderes als eine absolute URL strikt verboten ist.
mein ziehl ist,wenn das script dem client die location nicht senden kann,dann soll es den weitern vorgang beenden.
Dann ist ja gut: Dein Script kann dem Client den Header _immer_ übermitteln.
Cheatah
Hi,
Dann ist ja gut: Dein Script kann dem Client den Header _immer_ übermitteln.
Einspruch: die Verbindung könnte gekappt sein.
Aber:
Die Konstruktion
print "Location: $errorurl\n\n" || die("401 error 8\n");
ist trotzdem sinnfrei: wenn der Location-Header nicht geschickt werden kann, kann auch der Status-Header nicht gesendet werden.
cu,
Andreas
Hi,
Dann ist ja gut: Dein Script kann dem Client den Header _immer_ übermitteln.
Einspruch: die Verbindung könnte gekappt sein.
ich habe nichts von "ankommen" gesagt ;-)
Chea "Wieso wusste ich nur, dass so ein Einwand kommt?" tah
Hi,
Hi,
Dann ist ja gut: Dein Script kann dem Client den Header _immer_ übermitteln.
Einspruch: die Verbindung könnte gekappt sein.ich habe nichts von "ankommen" gesagt ;-)
"Übermitteln" schließt aber im Gegensatz zu "Senden" das "Ankommen" mit ein.
Chea "Wieso wusste ich nur, dass so ein Einwand kommt?" tah
Wenn Du es wußtest, wieso hast Du es nicht vermieden? ;-)
cu,
Andreas
Hi,
"Übermitteln" schließt aber im Gegensatz zu "Senden" das "Ankommen" mit ein.
das sehe ich anders.
Chea "Wieso wusste ich nur, dass so ein Einwand kommt?" tah
Wenn Du es wußtest, wieso hast Du es nicht vermieden? ;-)
Weil das die Antwort völlig unnötig - weil äußerst überflüssig - verkompliziert hätte. Dieser Punkt ist in diesem Thread von extremer Irrelevanz.
Cheatah
Hi,
was meinst Du mit falschem umbruch?
Du sendest nur Linefeeds, keine Carriage Returns.
meinst du so
print "Location: $errorurl\r\n" || die("401 error 8\n");
?
In selfhtml unter beispiel 2 bei "beachten Sie" stehts aber so
http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#print
mein script läuft im use strict modus.
Dann ist ja gut: Dein Script kann dem Client den Header _immer_ übermitteln.
nochmal zu sleep.Ich könnte mir vorstellen,dass sleep im zusammenhang mit
flock(DATEN,LOCK_EX)#datei vor anderen zugriffen schützen
$sleep(1);# 1 sekunde warten
funktionieren dürfte.
gruss
Alain
Hi,
print "Location: $errorurl\r\n" || die("401 error 8\n");
jetzt ist der Umbruch richtig, aber es ist nur noch einer.
In selfhtml unter beispiel 2 bei "beachten Sie" stehts aber so
Auch SelfHTML ist nicht frei von Fehlern.
nochmal zu sleep.Ich könnte mir vorstellen,dass sleep im zusammenhang mit
[...]
funktionieren dürfte.
Es funktioniert auch in anderen Zusammenhängen. Aber was versprichst Du Dir davon?
Cheatah
Hi,
also ist es so print "Location: $errorurl\r\n\r\n" || die("401 error 8\n");
recht?
jetzt ist der Umbruch richtig, aber es ist nur noch einer.
Es funktioniert auch in anderen Zusammenhängen. Aber was versprichst Du Dir davon?
eben dass nicht beliebige requests pro sekunde erfolgen sondern nur 1er/s
weil eventuell noch andere zugriff haben wollen-desshalb.
Gruss
Alain
Hi,
also ist es so print "Location: $errorurl\r\n\r\n" || die("401 error 8\n");
recht?
ja (sofern $errorurl eine _absolute_ URL enthählt). Dass der Fehlerfall niemals eintritt und somit das "|| die" nutzfrei ist weißt Du ja schon; und den Listenkontext verstehe ich immer noch nicht.
[sleep] Aber was versprichst Du Dir davon?
eben dass nicht beliebige requests pro sekunde erfolgen sondern nur 1er/s
weil eventuell noch andere zugriff haben wollen-desshalb.
Nein, das funktioniert nicht. Du möchtest Dich mit den Grundlagen von HTTP und Serverarchitektur, insbesondere Worker-Prozesse beschäftigen.
Cheatah
Hi,
also ist es so print "Location: $errorurl\r\n\r\n" || die("401 error 8\n");
recht?ja (sofern $errorurl eine _absolute_ URL enthählt). Dass der Fehlerfall niemals eintritt und somit das "|| die" nutzfrei ist weißt Du ja schon; und den Listenkontext verstehe ich immer noch nicht.
der url kann ja auch so sein ?
my $errorurl = "script.cgi"; ist ja im selben verzeichniss.Du denkst also print "Location... funktioniert immer egal wie oder was das script anspricht?
Dann lass ich "die" eben weg.
Gruss vom
Alain
Hi,
der url kann ja auch so sein ?
my $errorurl = "script.cgi";
nein, das ist im Location-Header explizit verboten.
Du denkst also print "Location... funktioniert immer egal wie oder was das script anspricht?
Es gibt nichts, was die Ausführung eines simplen print-Befehls verhindern könnte. Es sei denn, Du schließt STDOUT, aber davon gehe ich einfach mal nicht aus.
Cheatah
Hi,
der url kann ja auch so sein ?
my $errorurl = "script.cgi";nein, das ist im Location-Header explizit verboten.
naja,aber es geht trotzdem?!
Du denkst also print "Location... funktioniert immer egal wie oder was das script anspricht?
Es gibt nichts, was die Ausführung eines simplen print-Befehls verhindern könnte. Es sei denn, Du schließt STDOUT, aber davon gehe ich einfach mal nicht aus.
nach dem print folgt dann noch ein exit;
sub bad {
print "Location: $errorurl\r\n\r\n";
exit;
}
alles klar,ok thx
Grüsse Dich
Alain
Hi,
nein, das ist im Location-Header explizit verboten.
naja,aber es geht trotzdem?!
das hatte noch nie irgendeine Aussagekraft oder Relevanz. Der schwerwiegendste Fehler hierbei ist, von einer arg begrenzten Zahl an Testfällen auf die Allgemeinheit zu schließen.
nach dem print folgt dann noch ein exit;
Klar, wenn Du sicher bist, was Du tust.
Cheatah