Schrift
[thread]12448[/thread]

WWW::Mechanize und utf-8

Leser: 5


<< >> 3 Einträge, 1 Seite
bytebrain
 2008-09-05 14:21
#114294 #114294
User since
2008-07-21
20 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,

ich will mich mittels WWW::Mechanize auf einer Webseite mit meinen Benutzerdaten einloggen.
Das funktioniert soweit auch, nur bei einer bestimmten Seite leider nicht. Es scheint hier ein Problem bei der UTF-8-Kodierung zu geben.
Code: (dl )
Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/share/perl5/LWP/Protocol.pm line 114.


Mein Perl sieht so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl -w

use strict;
use warnings;
use diagnostics;

use WWW::Mechanize;
use Time::Local;
use POSIX qw(strftime);

my $http = WWW::Mechanize->new();
   $http->get('http://www.eineurl.de');

my $submit = $http->submit_form(
    form_number => 1,
    fields      => {
        login   => 'login',
        password=> 'passwort',
        },
    button      => 'submit');

print "Anmeldung fehlgeschlagen!\n" and exit 0 if(!$http->success());


Ich denke, das mein Perl hier keine Fehler verursacht, sondern das Problem von der Webseite kommt. Kamerad google hat mir erzählt, das LWP mit utf-8-Kodierten Seiten wohl Probleme hat,
aber ich würde trotzdem gerne mit dem Perl-Script auf die Seite zugreifen.

Weiß da jmd. vielleicht was?

Vielen Dank und schöne Grüße,
bytebrain
bytebrain
 2008-09-05 17:03
#114296 #114296
User since
2008-07-21
20 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,

ich habe das Problem gelöst. Und zwar folgendermaßen:
Code (perl): (dl )
1
2
3
4
5
6
7
my $submit = $http->submit_form(
15:     form_number => 1,
16:     fields      => {
17:         login   => utf8::decode('login'),
18:         password=> utf8::decode('passwort'),
19:         },
20:     button      => 'submit');


Gruß,
bytebrain
sid burn
 2008-10-10 13:25
#115364 #115364
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Hmm,
lass mich raten dein Editor selber speichert Dateien in UTF-8 Kodierung?

Wenn du bei Perl keine Angaben gibst dann sieht Perl den Sourcecode und alles andere als in ISO-8859-1 Kodiert an. Daher sieht Perl bei einem Passwort/Login wenn du ein Sonderzeichen nutzt zwei ISO-8859-1 Zeichen und nicht ein Zeichen in UTF-8 Kodierung.

Mithilfe von utf8::decode machst du dann folgendes das du Perl sagst der String UTF-8 Decodiert ist, und das er diesen bitte in in die interne Form umwandeln soll (was unicode ist).

Sinniger wäre es dann aber "use utf8;" zu nutzen. Damit sagst du Perl dann das der Sourcecode in utf8 Codierung gespeichert ist, und du musst nicht mehr manuell decodieren also utf8::decode aufrufen.

Ansonsten muss du bei allen Ein/Ausgabe entsprechend en/decoden. (Alles was rein kommt muss mit decode() behandelt werden, und alles was raus geht muss mit encode() behandelt werden). Wenn das Passwort also von der CLI vom Benutzer erfragt wird müsstest du ein decode machen.

Wenn du bei der Ausgabe kein encode() machst und Perl ein Unicode String hat wandelt er automatisch nach ISO-8859-1 codierung um!

Wenn WWW::Mechanize keine UTF-8 unterstützung hat oder generell Codierung nicht beachtet (Was bei Modulen von Programmieren aus Amerika schonmal öfters vorkommen kann) dann wandelt er dein Username/Passwort in ISO-8859-1 Codierung um. Je nach Username/Passwort kann es dann sein das es wieder nicht geht.

Btw. mach das encode/decode immer nur genau an den stellen wo du etwas ein/ausliest. Nicht irgendwo dazwischen.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
<< >> 3 Einträge, 1 Seite



View all threads created 2008-09-05 14:21.