LWP::useragent
Konrad
- perl
Hi,
kennt jemand eine deutsche Beschreibung des "LWP::useragent".
Mit der englischen Originalbeschreibung komme ich leider nicht zurecht und in der deutschen Version finde ich nur "LWP::simple".
Grüsse
Konrad
Hi,
habe jetzt einfach ein Beispiel gesucht und bei mir entsprechend abgeändert
(ohne gross zu verstehen was die einzelnen Zeilen bedeuten).
Das Beispiel funktioniert soweit, allerdings will ich nicht das ganze gelesene Dokument ausgeben, sondern die einzelnen Zeilen lesen und auswerten.
Kann mir jemand einen Tipp geben, wie das Lesen einzelner Zeilen funktioniert?
Hier das Beispiel
use LWP::UserAgent;
$url = "http://........./seite.html";
$ua = LWP::UserAgent->new();
$req = HTTP::Request->new("GET" => $url1);
$rc = $ua->request($req);
$seite = $rc->content();
if ( $rc->is_success() )
{
print $seite;
}
Grüsse
Konrad
Hi.
habe jetzt einfach ein Beispiel gesucht und bei mir entsprechend abgeändert
(ohne gross zu verstehen was die einzelnen Zeilen bedeuten).
Hört sich nicht nach einer guten Basis an, um Dein Ziel(welches auch immer genau) zu erreichen ;-)
Kann mir jemand einen Tipp geben, wie das Lesen einzelner Zeilen funktioniert?
Das LWP Ding gibt Dir nen String zurück. Guck ihn Dir mal an und finde heraus, durch welches Zeichen(z.B. "\n") die Zeilen getrennt sind.
Danach:
http://de.selfhtml.org/perl/funktionen/zeichenketten.htm#split
Grüße
Hi.
habe jetzt einfach ein Beispiel gesucht und bei mir entsprechend abgeändert
(ohne gross zu verstehen was die einzelnen Zeilen bedeuten).Hört sich nicht nach einer guten Basis an, um Dein Ziel(welches auch immer genau) zu erreichen ;-)
Was bleibt mir übrig als "Try and error", wenn ich keine verständliche Beschreibung finde?
Kann mir jemand einen Tipp geben, wie das Lesen einzelner Zeilen funktioniert?
Das LWP Ding gibt Dir nen String zurück. Guck ihn Dir mal an und finde heraus, durch welches Zeichen(z.B. "\n") die Zeilen getrennt sind.
Danach:
http://de.selfhtml.org/perl/funktionen/zeichenketten.htm#split
Danke, das hat jetzt geklappt, allerdings bin ich auf ein anderes Problem gestoßen.
Die gelesene Datei ist keine HTML-Datei und deshalb wird ins log die Meldung "malformed header" u.a. geschrieben.
Wie kann ich denn eine normale Datei lesen?
Danke
Danke, das hat jetzt geklappt, allerdings bin ich auf ein anderes Problem gestoßen.
Die gelesene Datei ist keine HTML-Datei und deshalb wird ins log die Meldung "malformed header" u.a. geschrieben.
Wie kann ich denn eine normale Datei lesen?
Gar nicht, in http gibt es keine Dateien. Ein Anfang deiner Problemlösung wäre es zuerst den Code strict machen, denn das was du uns gezeigt hast ist fehlerhaft
Struppi.
Hey Konrad.
Was bleibt mir übrig als "Try and error", wenn ich keine verständliche Beschreibung finde?
Besser suchen ;-) Der zweite Treffer sieht ganz gut aus:
http://www.google.de/search?hl=de&q=perl+lwp+beispiel&btnG=Google-Suche&meta=
Im übrigen scheint mir Dein Vorhaben mit LWP::Simple ausreichend umsetzbar, da hattest Du doch ne gute Beschreibung...
Danke, das hat jetzt geklappt, allerdings bin ich auf ein anderes Problem gestoßen.
Die gelesene Datei ist keine HTML-Datei und deshalb wird ins log die Meldung "malformed header" u.a. geschrieben.
Hmmm... Das Problem hast Du dann aber schon vorher, also unabhängig der Ergebnisverarbeitung gehabt. Dein Eingangsposting lautete aber "Klappt soweit"...
"HMTL-Datei" ist im übrigen auch in diesem Kontext falsch. Eine HTML-Datei kann auf einem Server oder auf Deinem PC liegen. Mit dem von Dir erzeugten HTTP Request hat das erstmal nichts zu tun.
Auf welchem Server wird der Logeintrag erzeugt? Auf Deinem, bei Aufruf Deines Scriptes, oder auf dem Zielserver des LWP Requests? Klappt der manuelle Aufruf über Deinen Browser?
Wie kann ich denn eine normale Datei lesen?
Das ist nicht die richtige Frage ;-)
Grüße
Hallo
Danke, das hat jetzt geklappt, allerdings bin ich auf ein anderes Problem gestoßen.
Die gelesene Datei ist keine HTML-Datei und deshalb wird ins log die Meldung "malformed header" u.a. geschrieben.
Hmmm... Das Problem hast Du dann aber schon vorher, also unabhängig der Ergebnisverarbeitung gehabt. Dein Eingangsposting lautete aber "Klappt soweit"...
Du hast Recht. "Klappt soweit" habe ich deshalb geschrieben, weil mir der Inhalt der Datei im Browser angezeigt wurde - da habe ich nicht ins log geschaut.
Wie kann ich denn eine normale Datei lesen?
Das ist nicht die richtige Frage ;-)
Ich hole aus:
Das PL-Programm www.zentral.test/cgi-bin/form.pl erzeugt Kontaktformulare für die Seiten
www.seite1.test, www.seite2.test etc.
Das funktioniert soweit ganz gut.
Bisher war der Empfänger von allen Kontakten eine (im Perl-Programm fest definierte) Person = e-mail-Adresse.
Jetzt sollen aber im Kontaktformular Empfänger ausgewählt werden dürfen und zwar je nach der Homepage, auf der ich bin unterschiedliche.
Daher hatte ich mir gedacht:
Im root-Verzeichnis der einzelnen Domains
www.seite1.test, www.seite2.test ...
jeweils eine Datei xyz.dat mit den auf dieser HP zulässigen Ansprechpartner mit zug. e-mail-Adresse.
Und zwar einen Adressaten pro Zeile (e-mail-Adresse verstümmelt/verschlüsselt).
Diese Dateien wollte ich jetzt jeweils lesen und auswerten.
Jetzt hoffentlich die richtige Frage:
Wie kann ich eine solche Datei auf einem anderen Server lesen?
Grüße
Konrad
Hallo Konrad.
Da Du
a) auf meine Fragen nicht eingehst
b) einen sehr kruden Lösungsweg verfolgst
c) weil ich gleich weg muss ;-)
nur ganz kurz:
Unter der Vorraussetzung, dass Du "www.example.org/text.txt" in Deinem Browser korrekt aufrufen kannst, probiere folgendes:
use LWP::Simple qw(!head);
my $inhaltDerDatei = get("http://www.example.org/text.txt");
Grüße
Hallo Dirk!
Da Du
a) auf meine Fragen nicht eingehst
Nachdem ich meine Frage (meinen Lösungsansatz) konkretisiert hatte, dachte ich, Deine Fragen erübrigen sich.
b) einen sehr kruden Lösungsweg verfolgst
Das Wort "krude" war mir bisher unbekannt? Lt Google "roh", "grausam".
Was ist konkret "krude" an dem Lösungsweg?
c) weil ich gleich weg muss ;-)
nur ganz kurz:Unter der Vorraussetzung, dass Du "www.example.org/text.txt" in Deinem Browser korrekt aufrufen kannst, probiere folgendes:
use LWP::Simple qw(!head);
my $inhaltDerDatei = get("http://www.example.org/text.txt");
www.example.org/text.txt kann ich aufrufen, es wird der Inhalt der Datei angezeigt.
Ergebnis des Tests (LWP::Simple):
"malformed header from script. Bad header=....(hier steht der Inhalt der datei text.txt)"
Grüße
Konrad
Hallo Dirk!
Ergebnis des Tests (LWP::Simple):
"malformed header from script. Bad header=....(hier steht der Inhalt der datei text.txt)"
Der Log-Eintrag wurde verursacht durch meinen Versuch, die gelesene Datei mit "print" testweise auszugeben. Wenn ich diese auf andere Weise ansehe, klappt es!
Super und vielen Dank!
Grüße
Konrad
Ergebnis des Tests (LWP::Simple):
"malformed header from script. Bad header=....(hier steht der Inhalt der datei text.txt)"Der Log-Eintrag wurde verursacht durch meinen Versuch, die gelesene Datei mit "print" testweise auszugeben. Wenn ich diese auf andere Weise ansehe, klappt es!
Du hast wirklich Probleme deine Probleme für andere verständlich zu machen, der Eintrag entstand also einzig und allein deshalb weil du dein Testskript als CGI aufgerufen hast, wann hast du uns das gesagt? Ich teste sowas in der Konsole. Das ein CGI Skript einen HTTP Header braucht hätten wir dir sagen können, wenn wir das gewußt hätten. Naja, ist wohl logisches denken.
Struppi.
Wie kann ich eine solche Datei auf einem anderen Server lesen?
Mit http gar nicht, das sagte ich aber bereits.
In deinem Skript ist ein Tippfehler, deshalb hab ich dir den Tipp mit use strict gegeben, dann hättest du ihn selber gefunden.
Struppi.
Wie kann ich eine solche Datei auf einem anderen Server lesen?
Mit http gar nicht, das sagte ich aber bereits.
Danke für den Hinweis, wie es nicht geht. Mir wäre ein Hinweis, wie es geht, lieber.
In deinem Skript ist ein Tippfehler, deshalb hab ich dir den Tipp mit use strict gegeben, dann hättest du ihn selber gefunden.
Mein Programm lief unter use strict. Wenn in dem gezeigten Beispiel ein Fehler ist, so kam er durch Cut/Paste und nachfolgender manueller Verkürzung/Korrektur.
Konrad
Mit http gar nicht, das sagte ich aber bereits.
Danke für den Hinweis, wie es nicht geht. Mir wäre ein Hinweis, wie es geht, lieber.
Mit http bekommst du keine Dateien, sondern nur Daten zurück geliefert, die der Server sendet.
In deinem Skript ist ein Tippfehler, deshalb hab ich dir den Tipp mit use strict gegeben, dann hättest du ihn selber gefunden.
Mein Programm lief unter use strict. Wenn in dem gezeigten Beispiel ein Fehler ist, so kam er durch Cut/Paste und nachfolgender manueller Verkürzung/Korrektur.
Das ist natürlich eine gute Vorrausetzung zu helfen. wenn wir nicht wissen was du falsch machst, können wir dir auch schwer sagen wie es richtig geht.
Struppi.
Hi,
Das ist natürlich eine gute Vorrausetzung zu helfen. wenn wir nicht wissen was du falsch machst, können wir dir auch schwer sagen wie es richtig geht.
Irren ist menschlich!
Du hast allerdings doch mehrfach geschrieben, dass mein Wunsch mit http grundsätzlich nicht zu lösen ist, dann müssen wir doch jetzt nicht diskutieren, ob in meinem http-Beispiel etwas falsch war oder nicht.
Ich hoffe, dass mir noch jemand einen Tipp gibt, wie ich es löse.
Zur Erinnerung: Die ausführliche Problemstellung und die Frage an deren Ende stehen in dem Beitrag.
Konrad
Das ist natürlich eine gute Vorrausetzung zu helfen. wenn wir nicht wissen was du falsch machst, können wir dir auch schwer sagen wie es richtig geht.
Irren ist menschlich!
Du hast allerdings doch mehrfach geschrieben, dass mein Wunsch mit http grundsätzlich nicht zu lösen ist,
Das habe ich nicht gesagt. Nur deine Vorstellung, dass du eine Datei lesen kannst ist falsch.
dann müssen wir doch jetzt nicht diskutieren, ob in meinem http-Beispiel etwas falsch war oder nicht.
Ich diskutiere nicht, sondern sage dir nur dass es extrem schwierig ist dir zu helfen.
Ich hoffe, dass mir noch jemand einen Tipp gibt, wie ich es löse.
Dein Skript (wenn ich es um die Fehler bereinige) funktioniert bei mir tadelos.
Struppi.
Dein Skript (wenn ich es um die Fehler bereinige) funktioniert bei mir tadelos.
Und Du bekommst kein Log-Eintrag, wenn die Datei nur normalen Text enthält?
Vielleicht könntest Du mir dann Dein korrektes Skript hier zeigen?
Danke
Konrad
Dein Skript (wenn ich es um die Fehler bereinige) funktioniert bei mir tadelos.
Und Du bekommst kein Log-Eintrag, wenn die Datei nur normalen Text enthält?
http kennt keine Dateien!
Les dir mal durch wie HTTP Funktioniert.
Und wo soll der Log eintrag entstehen?
Vielleicht könntest Du mir dann Dein korrektes Skript hier zeigen?
Es ist exakt dein Code.
Struppi.
Hilfe!!!!!!!!!!!!
Ich hoffe Dirk schaltet sich wieder ein!
Dein Skript (wenn ich es um die Fehler bereinige) funktioniert bei mir tadelos.
Und Du bekommst kein Log-Eintrag, wenn die Datei nur normalen Text enthält?http kennt keine Dateien!
Ich habe mit dem Editor die fragliche Datei erstellt und diese dann zu lesen versucht. Der Editor sagt in englisch "save file" und in der deutschen Version "Datei speichern". Und wenn ich diese jetzt lesen will, ist sie keine Datei mehr? Wenn HTTP keine Dateien kennt und du das gleiche Beispiel hat wie ich, hätte es doch nicht funktionieren können.
Les dir mal durch wie HTTP Funktioniert.
Und wo soll der Log eintrag entstehen?
Vielleicht könntest Du mir dann Dein korrektes Skript hier zeigen?
Es ist exakt dein Code.
Es ist schon abenteuerlich, was du schreibst. Zuerst ist mein Skript fehlerhaft und mit Korrekturen, die du vorgenommen hast, läuft es bei dir, und jetzt schreibst du plötzlich, dass der Code deines Skripts exakt dem meinen entspricht!
Das nenne ich Hilfe zur Selbsthilfe!
Danke!
Es ist exakt dein Code.
Es ist schon abenteuerlich, was du schreibst. Zuerst ist mein Skript fehlerhaft und mit Korrekturen, die du vorgenommen hast, läuft es bei dir, und jetzt schreibst du plötzlich, dass der Code deines Skripts exakt dem meinen entspricht!
OK, so sieht der Code aus
#!/usr/bin/perl -w
use LWP::UserAgent;
use strict;
my $url = "http://javascript.jstruebig.de/js/rubber.js";
my $ua = LWP::UserAgent->new();
my $req = HTTP::Request->new("GET" => $url);
my $rc = $ua->request($req);
my $seite = $rc->content();
if ( $rc->is_success() )
{
print $seite;
}
Das nenne ich Hilfe zur Selbsthilfe!
du hast bisher nur fehlerhaften Code gezeigt, du hast bisher nicht versucht zu verstehen was http bedeutet und was für eine Rolle Dateien dort spielen, irgendwo kann ich deinen Anteil nur wenig erkennen, ausser dass du rumlamentierst und erwartest dass andere für dich etwas tun.
Struppi.
Es ist exakt dein Code.
Es ist schon abenteuerlich, was du schreibst. Zuerst ist mein Skript fehlerhaft und mit Korrekturen, die du vorgenommen hast, läuft es bei dir, und jetzt schreibst du plötzlich, dass der Code deines Skripts exakt dem meinen entspricht!
du hast bisher nur fehlerhaften Code gezeigt, du hast bisher nicht versucht zu verstehen was http bedeutet und was für eine Rolle Dateien dort spielen, irgendwo kann ich deinen Anteil nur wenig erkennen, ausser dass du rumlamentierst und erwartest dass andere für dich etwas tun.
Wer hat den rumlamentiert? Wenn jemand widersprüchliches erzählt, kann man das wohl nicht so stehen lassen. Und wenn du schreibst, mein Code sei fehlerhaft und du hast den konkreten Fehler bei dir schon ausgemerzt, dann erwarte ich eigentlich, dass einem dieser Fehler gezeigt wird - und fertig.
Du magst ja super sein im Hinschreiben von Code-Zeilen, aber an logischem Denkvermögen fehlt es Dir leider (siehe Aussagen zu "Datei" und "Code exakt gleich - nur unterschiedlich"). Und konkret auf Fragen eingehen kannst Du auch nicht.
Im übrigen hat Dirk mit zwei Zeilen genau das erreicht, was ich wollte und was ich in der Problembeschreibung klar zum Ausdruck gebracht hatte.
Und Tschüß
du hast bisher nur fehlerhaften Code gezeigt, du hast bisher nicht versucht zu verstehen was http bedeutet und was für eine Rolle Dateien dort spielen, irgendwo kann ich deinen Anteil nur wenig erkennen, ausser dass du rumlamentierst und erwartest dass andere für dich etwas tun.
Wer hat den rumlamentiert? Wenn jemand widersprüchliches erzählt, kann man das wohl nicht so stehen lassen. Und wenn du schreibst, mein Code sei fehlerhaft und du hast den konkreten Fehler bei dir schon ausgemerzt, dann erwarte ich eigentlich, dass einem dieser Fehler gezeigt wird - und fertig.
und ich habe dir gesagt wie du den Fehler findest. Du hast nur lamentiert.
Du magst ja super sein im Hinschreiben von Code-Zeilen, aber an logischem Denkvermögen fehlt es Dir leider (siehe Aussagen zu "Datei" und "Code exakt gleich - nur unterschiedlich").
Wenn du nur einmal die Tipps gelesen und angwandt hast würdest du auch verstehen was gemeint ist, stattdessen kannst du nur - wie jetzt auch wieder - lamentieren und rumjammern. Hättest du use strict verwendet, hättest du den Tippfehler gemerkt ansonsten läuft der Code exakt so wie du ihn uns gezeigt hast. Das du mit http keine Datei liest könntest du mittlerweile auch Wissen.
Und konkret auf Fragen eingehen kannst Du auch nicht.
das hast du wohl abgeschrieben: https://forum.selfhtml.org/?t=174807&m=1148436
Im übrigen hat Dirk mit zwei Zeilen genau das erreicht, was ich wollte und was ich in der Problembeschreibung klar zum Ausdruck gebracht hatte.
die ich aufgrund deiner Ignoranz überhaupt auf Tipps einzugehen gar nicht gelesen habe. Da dein Skript durchaus prinzipiell funktioniert, aber du hast natürlich nicht erwähntr aus welchen Grund du nicht LWP::Simple verwendest.
Dein Konzept in der Problembeschreibung klingt aber tatsächlich krude, wie Dirk schon sagte.
Struppi.
Hi,
Kann mir jemand einen Tipp geben, wie das Lesen einzelner Zeilen funktioniert?
gar nicht. HTTP funktioniert so nicht. Du erhältst (zwar ggf. stückchen- aber definitiv nicht zeilenweise) die *gesamte* Ressource. Was Du dann allerdings damit machst, ist Dein Bier - für Deinen Perl-Code ist es am Ende nur ein String, und in String-Verarbeitung ist Perl recht gut.
Cheatah