Re: HTTP::Request funktioniert nicht(?)

Re: HTTP::Request funktioniert nicht(?)

am 23.02.2006 10:58:09 von Christian Lackas

* Marcus Lipke [2006-02-23]:

Hallo Marcus,

> use Thread qw/yield/;

Es gibt auch ein LWP::Parallel, das die das mit den parallelen Zugriffen
abnimmt.

> if ($res->is_success)
> {
> my $field1 = HTTP::Request->parse( 'hidden1' ) || "???";
> my $field2 = HTTP::Request->parse( 'hidden2' ) || "???";
> my $field3 = HTTP::Request->parse( 'hidden3' ) || "???";

Bist du sicher, dass du die Funktion der Methode parse() richtig
verstanden hast? Das mit erzeugst du hier jeweils ein neues
HTTP::Request-Objekt, auf der Basis eines für einen Request sehr
merkwürdigen Strings und vöölig unabhängig von deinem $res.
Um deine Daten aus einem HTML-Dokument zu erhalten solltest du
vielleicht eher ein Modul wie HTTP::Parse und Co. benutzen.
In speziellen Fällen reichen meist auch schon RegExp für ein akzeptables
Ergebnis.

> Mein Problem jedoch ist, dass ich nicht an die
> Inhalte der Hidden-Fields rankomme.
> Hier erhalte ich (als Beispiel) in der Ausgabe folgendes:
> Inhalt Feld 1: HTTP::Request=HASH(0x1f2d500)
> Inhalt Feld 2: HTTP::Request=HASH(0x23a2fc0)
> Inhalt Feld 3: HTTP::Request=HASH(0x2398530)
>
> Auch ein
> my $field1 = $cgi->param( 'hidden1' ) || "???";
> liefert kein brauchbares Ergebnis. :-(

Auch nicht erstaunlich, da auch hier $cgi keine Ahnung von der Existenz
einer unter $res->content befindlichen HTML-Seite hat (und davon
abgesehen auch keine HTML-Seiten zerlegt, da es ja ein CGI und kein
HTML-Objekt ist).

Gruß
Christian

--
Wozu Socken? Sie schaffen nur Löcher!
(Albert Einstein, dt.-am. Physiker, 1894-1963)
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: HTTP::Request funktioniert nicht(?)

am 23.02.2006 11:40:50 von unknown

Post removed (X-No-Archive: yes)

Re: HTTP::Request funktioniert nicht(?)

am 23.02.2006 13:16:23 von Christian Lackas

* Marcus Lipke [2006-02-23]:

Hallo Marcus,

> > Bist du sicher, dass du die Funktion der Methode parse() richtig
> > verstanden hast?
> Nein, nicht wirklich. Darum wäre ja mal ein kl. Beispiel-Code nett...

wofür? Wie man die Methode allgemein benutzt, oder wie man damit dein
Problem löst? Die Antwort auf letzteres ist: Die Methode stellt
keinerlei Funktionalität zur Verfügung, die dir bei dem beschriebenen
Problem weiterhilft.

Dein Problem liesse sich aber z.B. so lösen. Nehmen wir an, deine per
LWP gehole HTML-Seite befände sich in $html. Dort gäbe es also ein
'hidden'-Feld mit Namen 'foo' in hinreichend gutmütigem HTML, dann
könntest du sowas machen:

my ($foo) = $html =~ //;

Wenn die Struktur des HTML freier ist, dann schau dir -- wie ja bereits
erwähnt -- doch mal ein Modul wie HTML::Parser an. Damit bekommst du
aus jedem HTML-Dokument die vorhandenen Informationen.
Etwas einfacher zu benutzen, aber nicht ganz so mächtig ist
HTML::SimpleParse.

Gruß
Christian

--
Murphys Law 16: Wer lächelt, wenn etwas schiefgeht, weiß einen, den er
dafür verantwortlich machen kann.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: HTTP::Request funktioniert nicht(?)

am 23.02.2006 20:21:02 von unknown

Post removed (X-No-Archive: yes)

HTTP::Request funktioniert nicht(?)

am 23.02.2006 20:54:37 von unknown

Post removed (X-No-Archive: yes)

Re: HTTP::Request funktioniert nicht(?)

am 24.02.2006 10:59:45 von Christian Lackas

* Marcus Lipke [2006-02-23]:

Hallo Marcus,

> > my ($foo) = $html =~ //;
> Das klappt zwar so fast, allerdings bekomme ich als Ergebnis einen
> exorbitant hohen Wert.

dann zeig doch mal die Original-Zeile aus dem HTML-Dokument.

> http://faq.perl-community.de/bin/view/Wissensbasis/FaqBenutz ungModuleHTMLParser
> habe ich versucht, das dortige Beispiel für meine Zwecke zu gebrauchen,
> allerdings nur mit mäßigem Erfolg, da ich es nur teilweise verstehe. :-(

In deinem speziellen Fall willst du ja ein HTML-Form auseinander nehmen.
Da bietet sich dann natürlich erstmal HTML::Form an (HTML als ganzes ist
ja viel zu allgemein).

Und damit wird das bei dir einfach zu:

my $ua = LWP::UserAgent->new;
my $response = $ua->get("http://www.example.com/form.html");
my @forms = HTML::Form->parse($response);

wenn mehrere Forms vorhanden sind, dann musst du dir noch das richtige
raussuchen und und kommst dann per attr(), find_input() oder param() an
dein Ziel.

Gruß
Christian

--
Murphys Law 8: Die Informationen, die am dringendsten benötigt wird,
ist am wenigsten erreichbar.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: HTTP::Request funktioniert nicht(?)

am 24.02.2006 12:21:31 von unknown

Post removed (X-No-Archive: yes)

Re: HTTP::Request funktioniert nicht(?)

am 24.02.2006 13:30:33 von Christian Lackas

* Marcus Lipke [2006-02-24]:

Hallo Marcus,

das man Euch heute allen das so aus der Nase ziehen muss. Ihr solltet
doch alle selbst am meisten daran interessiert sein ausreichend
Informationen zur Verfügung zu stellen, damit Euer Problem schnell
gelöst wird.

> > dann zeig doch mal die Original-Zeile aus dem HTML-Dokument.
> ---schnipp---
>


>
>
>
>
>

>

> ---schnapp---

Und wenn du jetzt

my ($value) = $html =~ //;

benutzt (obiger Text befinde sich in $html), dann kommt da was in $value
raus? Wenn das nicht '0' ist, dann machst du irgendwo was ganz böse falsch.

> > wenn mehrere Forms vorhanden sind, dann musst du dir noch das richtige
> > raussuchen und und kommst dann per attr(), find_input() oder param() an
> > dein Ziel.
> Ich habe diesbzgl. ma Tante Google befragt und bin gestoßen auf:
>

Hast du das auch gelesen?

> Trotzdessen ist mir nicht klar, weswegen in das Array @forms geparst
> wird, die Funktion find_input( $name ) sich jedoch auf einen Skalar
> bezieht...

Weils es mehrere Forms in dem HTML-Dokument geben könnte. In sklarem
Kontext (siehe deine Referenz oben, was übrigens einfach die man-page
des Moduls ist) bekommt man nur das erste Form.
Gibt es bei dir mehrere Formulare? Wenn ja, dann finde raus welches für
dich interessant ist (z.B. über die Reihenfolge im Dokument, oder einen
Schlüssel der nur da vorkommt, oder ...) und benutze nur das für dein
weiteres vorgehen.

Gruß
Christian

--
Furzt der Bauer abends laut, gab's zu mittag Sauerkraut.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: HTTP::Request funktioniert nicht(?)

am 24.02.2006 13:41:59 von unknown

Post removed (X-No-Archive: yes)