Font
[thread]2954[/thread]

LWP::UserAgent und Cookies?: wie geht das



<< >> 10 entries, 1 page
guest Gast
 2005-12-30 15:45
#29586 #29586
Ich habe ein Script,das mir Seiten vom Server holt und auswertet. Leider kann ich die seiten nicht komplett lesen, da der Login nicht stattfindet. Obwohl ich ein Login per Cookie durchgeführt habe und die Informationen im Cookie drinstehen.

Wie kann ich die Infos aus dem Cookie jetzt für LWP benutzen
(IE 6)

mit activeperl 5.8
coax
 2005-12-30 19:09
#29587 #29587
User since
2003-08-11
457 articles
BenutzerIn
[default_avatar]
In der Dokumentation zu HTTP::Cookies::Microsoft laesst sich ein komplettes Beispiel finden, etwas abgewandelt sieht dass dann so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

 use strict;
 use warnings;

 use HTTP::Cookies::Microsoft;
 use LWP::UserAgent;

 my $username = getlogin;
 my $cookie_dir = "C:/Dokumente und Einstellungen/$username/Cookies/";

 my $cookie_jar = HTTP::Cookies::Microsoft->new(
     file => "$cookie_dir/index.dat",
     delayload => 1 );

 my $UA = LWP::UserAgent->new( cookie_jar => $cookie_jar );
Kann dir nicht versichern dass es 100%-tig funktioniert.

siehe:
perldoc HTML::Cookies::Microsoft
perldoc LWP::UserAgent
,,Das perlt aber heute wieder...'' -- Dittsche
sit
 2005-12-30 19:58
#29588 #29588
User since
2005-12-30
8 articles
BenutzerIn
[default_avatar]
Danke, das habe ich mal probiert. aber klappt irgendwie nicht.

Ich bekomme zwar die Html seite komplett in Datei geliefert, aber als nicht eingeloggt.

hier mal der code...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#! C:/perl/bin/perl.exe -w



# use strict;
use warnings;

use HTTP::Cookies::Microsoft;
use LWP::UserAgent;
use FileHandle();
new FileHandle();
my %fhs=();

my $username = getlogin;
my $cookie_dir = "C:/Dokumente und Einstellungen/$username/Cookies/";

my $cookie_jar = HTTP::Cookies::Microsoft->new(
    file => "$cookie_dir/index.dat",
    delayload => 1 );

my $UA = LWP::UserAgent->new( cookie_jar => $cookie_jar );
 


$TestFile3 = "testhtml.html";


my $fh = new FileHandle($TestFile3,"w");



my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
my $response = $ua->get('[URL=http://server.de/seite/seite']http://server.de/seite/seite'[/URL]);

if ($response->is_success) {
    print ($fh $response->content );
}
else {
    die $response->status_line;
}

$fh->close();

exit(0);


nun das ganze versuche ich unter xp. das sollte ich vielleicht noch dazusagen....\n\n

<!--EDIT|esskar|1135967616-->
coax
 2005-12-30 20:38
#29589 #29589
User since
2003-08-11
457 articles
BenutzerIn
[default_avatar]
Das kann so nicht funktionieren, weil du einfach nur meinen Code in deinen hineinkopiert hast.
Jetzt erzeugst du zwei LWP::UserAgent-Objekte, eins mit cookie_jar und eins ohne, wobei letzters keine Seite herunterlaedt ( es tut ueberhaupt nichts weiter ).
Code den du serviert bekommst solltest du zu erstmal einmal lesen und versuchen zu verstehen und dann per Hand in dein Script integrieren und nicht einfach die Kopierfunktion nutzen, das hilft dir naemlich nicht viel weiter.

Vermutlich haettest du Code wie..., wobei das print ein unlink sein koennte
Code: (dl )
1
2
use File::Find;
find(sub{ print $File::Find::name; }, '/');
auch einfach so uebernommen und dann ein boeses Erwachen gehabt ;).
,,Das perlt aber heute wieder...'' -- Dittsche
sit
 2005-12-30 21:26
#29590 #29590
User since
2005-12-30
8 articles
BenutzerIn
[default_avatar]
Nun, das stimmt wohl. Man sollte auch Nachdenken. Aber ich habe vielleicht gerade eine Blockade.

hier nochmal den Code Etwas bereinigt mit einer echten url.

ich habe einfach mal einen server im netz ausgesucht der die bedingungen erfüllt. du kannst es also auch testen. Bei mir wird eine HTML Datei erzeugt die soweit ok ist,bis auf die anmeldung. ich habe auch die perldoc gelesen bin aber immer noch nicht schlauer....
wäre schön wenn du dir das anschauen kannst.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#! C:/perl/bin/perl.exe -w

use strict;
use warnings;
use HTTP::Cookies::Microsoft;
use LWP::UserAgent;
use FileHandle();
new FileHandle();
my %fhs=();

my $username = getlogin;
my $cookie_dir = "C:/Dokumente und Einstellungen/$username/Cookies/";

my $cookie_jar = HTTP::Cookies::Microsoft->new(
    file => "$cookie_dir\\index.dat",
    delayload => 1 );

my $UA = LWP::UserAgent->new( cookie_jar => $cookie_jar );
$UA->timeout(10);
$UA->env_proxy;
my $response = $UA->get('[URL=http://single.de/profil/testusteron']http://single.de/profil/testusteron'[/URL]);

my $TestFile3 = "testhtml.html";

my $fh = new FileHandle($TestFile3,"w");

if ($response->is_success) {
    print ($fh $response->content ); # or whatever
}
else {
    die $response->status_line;
}

$fh->close();

exit(0);

-------------------

einloggen kannst du dich über die seite single.de
login mit
testusteron passwort 9ece676d

auf der loginseite gibt es den punkt langzeit cookie...
das script funktioniert sonst fehlerfrei....\n\n

<!--EDIT|esskar|1135971823-->
esskar
 2005-12-30 21:44
#29591 #29591
User since
2003-08-04
7321 articles
ModeratorIn

user image
@sit: denke das nächste mal bitte an die code-tags!\n\n

<!--EDIT|esskar|1136046529-->
renee
 2005-12-31 08:04
#29592 #29592
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
Fuer so etwas eignet sich wohl besser CPAN:WWW::Mechanize

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use strict;
use warnings;
use HTTP::Cookies;
use WWW::Mechanize;

my $cookie_jar = HTTP::Cookies->new();
my $your_url = 'http://url_to_loginpage.tld';
my $mech = WWW::Mechanize->new(-cookie_jar => $cookie_jar);

$mech->get( $your_url );
$mech->submit_form(
form_number => 1, # wievieltes Formular ist das Login-Form
fields => {
username => 'mungo',
password => 'lost-and-alone',
}
);
print $mech->content(); #sollte von eingeloggter Seite sein...
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/
sit
 2005-12-31 11:01
#29593 #29593
User since
2005-12-30
8 articles
BenutzerIn
[default_avatar]
:-) Danke...

das versuche ich die ganze Zeit schon... aber ich finde kein passendes Modul... Da dreh ich noch durch... ich habe zwar mechanize.pm gefunden, das passt aber nicht mit meiner perl versin 5.8.7 von activeperl zusammen. da ist angeblich der useragent zu alt mit 2.0.1 der muss mindestens 2.0.3 haben und eine neue libwww habe ich auch nicht gefunden

unter unix scheint das kein problem zu sein ...

hast du eine Idee wo ich die passenden Module finde oder in welcher lib die drinsteckt?
[E|B]
 2005-12-31 12:50
#29594 #29594
User since
2003-08-08
2561 articles
HausmeisterIn
[Homepage] [default_avatar]
@coax

In der index.dat werden unter Windows doch nicht die Cookies abgelegt, sondern in dem temporären Internetdateien, und das ist ein Verzeichnis. Oder irre ich mich da?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
sit
 2005-12-31 18:07
#29595 #29595
User since
2005-12-30
8 articles
BenutzerIn
[default_avatar]
Hallo,
das habe ich jetzt geschafft- habe den win32::ie:mechanize geladen. funktioniert, bis auf das ich unregelmäßige ergebnisse bekomme. also ein Timeout problem.

bei LWP gibt es die methode timeout(xx)

gibt es die für mechanize auch? habe mich durch die BEschreibungen gelesen, stehtnix drin. allerdings steht es auch bei LWP nicht explizit drin. habe die method einfach mal ausprobiert, kommt aber fast wie erwartet ein fehler....

rat???????
<< >> 10 entries, 1 page



View all threads created 2005-12-30 15:45.