Schrift
[thread]11556[/thread]

Win32::Internet + Cookies

Leser: 1


<< >> 7 Einträge, 1 Seite
Kean
 2008-04-02 16:16
#107740 #107740
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Ich rufe momentan eine Internetseite mit Win32:: Internet ab wie folgt:

Code (perl): (dl )
1
2
3
4
use Win32::Internet;

my $INET = new Win32::Internet();
my $file = $INET->FetchURL("http://www.seite.de");


Jetzt muss ich aber eine Seite abrufen welche sich hinter einem Login befindet.
Die Übergabe des Logins ist kein Problem, aber es werden Cookies verwendet um den Login zu speichern.

Gibt es eine Möglichkeit dies einfach zu realisieren?
renee
 2008-04-02 16:59
#107743 #107743
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Gibt es einen Grund, Win32::Internet und nicht LWP zu verwenden?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Kean
 2008-04-02 17:06
#107745 #107745
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Nein, LWP, ok, da schau ich mal.
Eine Art Tutorial gibt es da nicht zufällig?
renee
 2008-04-02 17:16
#107748 #107748
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kean
 2008-04-04 12:00
#107856 #107856
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Vielen Dank! Über LWP bin ich zu dem Modul WWW:Mechanize gekommen welches das Cookie Handling automatisch macht.

Jetzt habe ich hier aber noch ein Problem mit dem ich nicht weiterkomme. Und zwar möchte ich jetzt den Login realisieren aber der Name der Eingabefelder wechselt regelmäßig.

Sieht jemand eine Möglichkeit die vorhandenen Felder des Forms abzurufen so das ich die Namen der Felder immer neu einlesen kann??

Hier mal der bisherige "statische" Code:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use WWW::Mechanize;
use HTML::Form;
my $mech = WWW::Mechanize->new( autocheck => 1 );

my $response = $mech->get( "http://www.seite.de" );

$mech->submit_form(
        form_number => 1,
        fields      => {
            Name123    => 'User',
            PW123    => '12345',
        }
    );
 

open (AUSGABE, ">dump.htm");
print AUSGABE $mech->content;
close (AUSGABE);
        
exit;



Das hier hab ich noch gefunden:

Code (perl): (dl )
1
2
3
$mech->form_number($number)

Selects the numberth form on the page as the target for subsequent calls to field() and click(). Also returns the form that was selected.


Dabei wird ein HTML::FORM zurückgegeben. Kann ich hier irgendwie die Eingabefeldernamen auslesen? Und wie?
renee
 2008-04-04 12:37
#107857 #107857
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Gibt es eine bestimmte Regel, nach der die Namen der Felder wechseln?

Es gibt die Methode find_all_inputs()...

Und aus der Doku zu CPAN:HTML::Form:
Quote
@inputs = $form->inputs

This method returns the list of inputs in the form. If called in scalar context it returns the number of inputs contained in the form. See "INPUTS" for what methods are available for the input objects returned.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Kean
 2008-04-04 12:44
#107859 #107859
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Okay hat geklappt ;) Danke renee

Hier die Auflösung:

Code (perl): (dl )
1
2
3
4
5
6
7
$form = $mech->form_number(1);
@inputs = $form->inputs;

foreach $input (@inputs)
        {
        print $input->type.'->'.$input->name."\n";
        }
<< >> 7 Einträge, 1 Seite



View all threads created 2008-04-02 16:16.