HTTP::UserAgent gibt bei "http://www" keinen Fehler aus
Stefan Kleeschulte
- perl
Hi zusammen!
Ich habe mir in Perl ein Gästebuch-Script geschrieben. Dieses Script prüft bei einem neuen Eintrag unter anderem mit Hilfe des HTTP::UserAgent, ob die eingegebene Homepage-URL korrekt bzw. erreichbar ist:
<schnip>
if ($FORM{'homepage'} ne "") {
$url = $FORM{'homepage'};
require LWP::UserAgent;
$ua = LWP::UserAgent->new();
$request = HTTP::Request->new('GET', $url);
$response = $ua->request($request);
if($response->is_error) {
$homepage_error = 1;
$homepage_error_info_code = $response->code();
$homepage_error_info_message = $response->message();
$homepage_error_message = "Die angegebene Homepage-URL ist nicht korrekt! (Die Angabe einer Homepage-URL ist nicht zwingend. Genauer Fehler: "$homepage_error_info_code $homepage_error_info_message")";
} else {
$homepage_error = 0;
}
} else {
$homepage_error = 0;
}
<schnap>
Wenn nun jemand als Homepage-URL "http://www" oder "http://www/" eingibt, dann gibt HTTP::UserAgent leider keine Fehlermeldung aus. Woran kann das liegen?
Und reicht es aus, zusätzlich einfach noch zu prüfen, ob $FORM{'homepage'} nicht "http://www" oder "http://www/" enthält, oder gibt es noch andere solcher "Lücken"?
CU :-)
Stefan
Hi zusammen!
hi stefan,
Ich habe mir in Perl ein Gästebuch-Script geschrieben. Dieses Script prüft bei einem neuen Eintrag unter anderem mit Hilfe des HTTP::UserAgent, ob die eingegebene Homepage-URL korrekt bzw. erreichbar ist:
<schnip>
if ($FORM{'homepage'} ne "") {
$url = $FORM{'homepage'};
require LWP::UserAgent;
$ua = LWP::UserAgent->new();
$request = HTTP::Request->new('GET', $url);
$response = $ua->request($request);
if($response->is_error) {
$homepage_error = 1;
$homepage_error_info_code = $response->code();
$homepage_error_info_message = $response->message();
$homepage_error_message = "Die angegebene Homepage-URL ist nicht korrekt! (Die Angabe einer Homepage-URL ist nicht zwingend. Genauer Fehler: "$homepage_error_info_code $homepage_error_info_message")";
} else {
$homepage_error = 0;
}
} else {
$homepage_error = 0;
}
<schnap>
Wenn nun jemand als Homepage-URL "http://www" oder "http://www/" eingibt, dann gibt HTTP::UserAgent leider keine Fehlermeldung aus. Woran kann das liegen?
gib mal in die adressleite deines browsers http://www oder http://www/ ein. und was passiert? ich vermute http::useragent hat damit recht, keine fehlermeldung auszugeben.
Und reicht es aus, zusätzlich einfach noch zu prüfen, ob $FORM{'homepage'} nicht "http://www" oder "http://www/" enthält, oder gibt es noch andere solcher "Lücken"?
CU :-)
Stefan
bye,
manyak
Hi,
anstelle LWP::User::Agent wäre LWP::Simple einfach besser - prüf damit ob ein Header zurückgegeben wird und alles wird gut :)
Rolf
anstelle LWP::User::Agent wäre LWP::Simple einfach besser - prüf damit ob ein Header zurückgegeben wird und alles wird gut :)
Hm, das hatte ich zuerst auch vor, aber dann bin ich auf folgenden Beitrag aus dem Perl-Forum bei Spotlight.de gestoßen:
--> http://spotlight.de/nzforen/prl/m/prl-991231841-6252.html
CU :-)
Stefan
Hi!
Ich habe mir in Perl ein Gästebuch-Script geschrieben. Dieses Script prüft bei einem neuen Eintrag unter anderem mit Hilfe des HTTP::UserAgent, ob die eingegebene Homepage-URL korrekt bzw. erreichbar ist:
if($response->is_error) {
Was ist, wenn der Zielserver voruebergehend nicht erreichbar ist? Was, wenn ein CGI Script voruebergehend fehlerhaftet arbeitet und mit 500 antwortet?
Wenn nun jemand als Homepage-URL "http://www" oder "http://www/" eingibt, dann gibt HTTP::UserAgent leider keine Fehlermeldung aus. Woran kann das liegen?
Daran, dass das ein voellig korrekte URL ist, und der Server tatsaechlich auch antwortet.
Ueberleg mal, was Dein Script *dort auf dem Server* tut. Es sucht einen Rechner namens www. Nun, www heisst zufaelligerweise der Server *selbst*! Es handelt sich dabei um genau das www, das bei www.domain.com vorne dran steht. Nur da der Server ja selbst innerhalb dieser Domain steht, braucht er diese nicht mit angeben und der Hostname (Rechnername) reicht aus. D.h. im Klartext, der Server richtet die Anfrage *an sich selbst*.
Und reicht es aus, zusätzlich einfach noch zu prüfen, ob $FORM{'homepage'} nicht "http://www" oder "http://www/" enthält, oder gibt es noch andere solcher "Lücken"?
Ja, alle anderen Rechnernamen innerhalb dieser Domain. Nur wird auf den meisten wahrscheinlich kein Webserver laufen, weshalb dort dann doch ein Fehler festgestellt wird.
So long
if($response->is_error) {
Was ist, wenn der Zielserver voruebergehend nicht erreichbar ist? Was, wenn ein CGI Script voruebergehend fehlerhaftet arbeitet und mit 500 antwortet?
Nenn' mir eine bessere Möglichkeit die Korrektheit der URL zu prüfen...
CU :-)
Stefan
Nenn' mir eine bessere Möglichkeit die Korrektheit der URL zu prüfen...
</selfhtml/sfarchiv/2000_3/t21729.htm#a111398>. Kanst Dich ja auf $httpurl beschraenken.
Der Rest meines Postings hat Dich so gar nicht interessiert?
Nenn' mir eine bessere Möglichkeit die Korrektheit der URL zu prüfen...
</selfhtml/sfarchiv/2000_3/t21729.htm#a111398>. Kanst Dich ja auf $httpurl beschraenken.
Hm, aber sollte nicht wenigstens noch FTP dazu?
Naja, kann ich mir ja selber überlegen - trotzdem danke für deine Antwort!
Der Rest meines Postings hat Dich so gar nicht interessiert?
Doch sicher, darin hast du ja meine ursprüngliche Frage beantwortet - ebenfalls Danke!
CU :-)
Stefan