perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 20
Click for quality!




12.02.2012 / 02:59

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  CGI: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragAuto Login in ein Forum per CGI Subroutine
Seitenanfang
Hallo Community,
ich hoffe, dass ich im CGI: Allgemeines Forum richtig bin mit meinem Problem.
Andernfalls bitte ich um Verschiebung in das richtige Forum.

Zu meinem Problem - die Aufgabenstellung:

Von meinem PC aus starte ich auf Server 1 eine CGI-Anwendung, welche sich mit meinem Usernamen und Passwort in ein Forum auf Server 2 einloggen soll (und nach erfolgreichem Login Beiträge verfassen soll).

Zum Sinn des Vorhabens:
Auf Server 1 befindet sich eine Linkliste,
deren aktualisierte Inhalte im Forum auf Server 2 gepostet werden soll.

Durch googeln bin bisher soweit gekommen:

sub build_forum_connection {
#--------------------------
# 6 Session ID aus Quelltext extrahieren
# 6.1 Quelltext holen:
print "Location: http://www.forum-auf-server-zwei.de\n\n";
$ua = LWP::UserAgent->new();
$total = get("http://www.forum-auf-server-zwei/login.php");
print "Content-type: text/plain\n\n";
$total =~ s/</</g;

# 6.2 Session-ID extrahieren:
$total =~ s/\|//g;
$total =~ s/(input type="hidden" name="s" value=".+?")/(input type="hidden" name="s" value=|.+?| )/;
$total =~ s/"input"//g;
$total =~ /(^\|(.+?)\|)/;
my $total = $1;
print "Testlauf","\n" ;
$total =~ s/(type="hidden" name="s" value=")//g;
$total =~ s/(")//g;
$total =~ s/(input )//g;
print $total ,"\n";

# 6.3 Aufruf der login.php
use HTTP::Request::Common qw(POST);
$url = 'http://www.forum-auf-server-zwei/login.php';
$req = POST $url,
[ vb_login_username => 'UserName',
vb_login_password => 'UserPasswort',
cookieuser => '1',
s => "$total",
do => 'login',
forceredirect => '1'

];
print "HTTP-FullRequest-Header: \n";
print $req->headers->as_string() , "\n";
print "HTTP-FullRequest-Header-Content: \n";
print $req->content() ,"\n";

# 6.4 Anfrage absenden
use LWP::UserAgent;
$ua = LWP::UserAgent->new();
$ua->timeout(3);
$response = $ua->request($req);
if ( $response->is_error() ) {
print "Error-Code : ", $response->code() , "\n";
print "Fehlermeldung: ", $response->message() , "\n";
}
else { print $response->content() , "\n";
}
} # / sub build_forum_connection

Das Ergebnis:
Die Startseite des Forums wird aufgerufen und ich sehe lediglich meinen Nick unter den eingeloggten Usern.

Das Problem:
Das Script ist nicht eingeloggt .

Laut Webmaster von Server2 ist dies ein Cookie Problem.

Das Script auf Server1 muss also Cookies empfangen und speichern.
Server2 muss Schreib/Lesezugriff auf das gespeicherte Cookie auf Server1 haben.

Die Lösung des Problems finde ich durch googeln nicht und bitte deshalb die Community um Hilfe.

Mit bestem Dank und Grüssen,
Andreas.

Datum: 15.09.2007-20:03

Beitragre: Auto Login in ein Forum per CGI Subroutine
Seitenanfang
Ich habe das Problem inzwischen lösen können.

1.Schritt:
Das Forum im Internet Explorer aufrufen - Cookies müssen erlaubt sein.
Den Namen des gesetzten Cookies ermitteln.
Eine leere Textdatei unter dem Namen des Cookies erstellen und im gewünschten Verzeichnis von Server1 speichern (CHMOD 777).

2. Der Code als Subroutine:

sub build_forum_connection {

### Login Sequence :

# Step 0 : (require Perl modules)

use LWP::UserAgent;

use HTTP::Request::Common qw(POST GET);

use HTTP::Cookies;

# Step 1 : (prepare cookie)

$ua = LWP::UserAgent->new;

$ua->cookie_jar(HTTP::Cookies->new(file => "Name des Cookies", autosave => 1));

# Step 2 : (proof url)

$res = $ua->request(HTTP::Request->new(GET => "URL des Forums"));

print $res->status_line, "\n";

# step 3 :

my $ua = LWP::UserAgent->new;

# Define user agent type

$ua->agent('Mozilla/8.0');

# Cookies

$ua->cookie_jar(HTTP::Cookies->new(file => 'Name des Cookies', autosave => 1 ));

# Request object

my $req = GET 'URL des Forums';

# Make the request

my $res = $ua->request($req);

# Check the response - deactivated

#if ($res->is_success) {print $res->content;}

#else {print $res->status_line . "\n";}

# Step 4 : (send login data to login form)

# Login Form über Quelltext : URL des Forums ermitteln

my $req = POST 'Login Form des Forums' , [ vb_login_username => 'User Name', vb_login_password => 'User Passwort', cookieuser => '1', s => "", do => 'login', forceredirect => '1' ] ;

# Make the request

my $res = $ua->request($req);

# Check the response (deactivated because response does contain an unwanted redirection)

#if ($res->is_success) {print $res->content;}

#else {print $res->status_line . "\n";}

### Hurra - wir sind eingeloggt ###

# / Login Sequence

### Anleitung zum Verfassen von Beiträgen ###

# Gewünschten Forumsbeitrag anforden:

my $req = GET 'URL des Forumsbeitrages';

my $res = $ua->request($req);

## if ($res->is_success) {print $res->content;} # nur zur Kontrolle erforderlich

## else {print $res->status_line . "\n";} # nur zur Kontrolle erforderlich

# Quelltext des Forumsbeitrages ermitteln ( URL der ANTWORT Funktion wir benötigt ) und

# aus Quelltext der aufgerufenen ANTWORT Seite die notwendigen Variablen für POST und die "Sende an URL" der ANTWORT Seite ermiteln

# Bzw. im Quelltext : FORM TAG analysieren

# Antwortseite anforden:

my $req = GET 'URL der ANTWORT Funktion';

my $res = $ua->request($req);

# POST formulieren:

# Nachfolgendes Beispiel hat einen Beitrag gemeldet : Beitrag Melden Funktion

my $req = POST 'Senden an URL der Antwortseite' , [do => '...' , s => "" , reason => '...' , p => '...' , url =>'...' ] ;

my $res = $ua->request($req);

# Erfolgskontrolle (optional):

my $req = GET 'URL des Forumsbeitrages';

my $res = $ua->request($req);

if ($res->is_success) {print $res->content;} # nur zur Kontrolle erforderlich

else {print $res->status_line . "\n";} # nur zur Kontrolle erforderlich

### / Anleitung zum Verfassen von Beiträgen ###

} # / sub build_forum_connection

Ich habe den Code nur mal eben schnell mit eigenen Kommentaren versehen - ich hoffe, das ist eingermaßen verständlich.

Sorry auch für die englischen Kommentare -
ich korrespondiere auch auf englischsprachigen Foren.

Vielen Dank für die mir entgegengebrachte Hilsbereitschaft!

Mit bestem Dank und Grüssen,
Andreas.


Datum: 30.09.2007-13:21

-






-
-