Sockets und HTTP-Streams in Perl
2005-09-30 13:47
Popcorn
Ich komme seit zwei Tagen nicht wirklich weiter. Ich möchte das Grundgerüst für Bots im Rapidchat bauen. Beim ersten Kontakt bekommt man eine ID zugewiesen. Dann baut sich der Chat-Screen auf und im Frameset gibt es einen Frame namens main, in dem, in Verbindung mit einer ID, immer die aktuellen Chatnachrichten empfangen werden.
Schreiben ist kein Problem. Nur immer wenn ich den Inhalt per Get-Request anzapfen möchte, bleibt er schon an dieser Request-Stelle stehen. Eigentlich hatte ich die Hoffnung, dass er dort weitermacht und ich alles weitere vom Socket abzapfen kann.
Die Lektüre der Module hat mich auch nicht wirklich weiter gebracht. Und Google gibt mir für diese Fall leider keine Abschreibbeispiele. ;) Weiß jemand was er von mir will?
Der Chat sieht so aus: http://www.fusion-clan.de/chat.php
Schreiben ist kein Problem. Nur immer wenn ich den Inhalt per Get-Request anzapfen möchte, bleibt er schon an dieser Request-Stelle stehen. Eigentlich hatte ich die Hoffnung, dass er dort weitermacht und ich alles weitere vom Socket abzapfen kann.
Die Lektüre der Module hat mich auch nicht wirklich weiter gebracht. Und Google gibt mir für diese Fall leider keine Abschreibbeispiele. ;) Weiß jemand was er von mir will?
#!/usr/bin/perl -w
BEGIN {
$| = 1;
open (STDERR, ">&STDOUT");
print qq~Content-type: text/html\n\n~;
}
$SIG{'ALRM'} =\&alarm_handle;
alarm(60);
use LWP::UserAgent;
use LWP::Simple;
use HTTP::Request::Common;
use IO::Socket::INET;
my $browser = LWP::UserAgent->new;
# Hello
$request = HTTP::Request->new('GET', '[url=http://chat.rapidchat.de/login?network=4247&language=ger]http://chat.rapidchat.de/login?network=4247&language=ger[/url]');
$parse = $browser->request($request)->as_string;
#Unique ID / Keycode extrahieren
$parse = substr($parse, index($parse, "uid_keycode") + 15, 500);
$parse = substr($parse, 0, index($parse, '"'));
$uid_keycode = $parse;
$socket = IO::Socket::INET->new(PeerAddr => '80.237.244.4',
PeerPort => 'http(80)',
Proto => 'tcp') or die "Could not connect to 80.237.244.4:80 $@\n";
print 'Schicke Get-Request und hänge mich auf';
$request = HTTP::Request->new('GET', '[url=http://chat.rapidchat.de/chat?keycode=]http://chat.rapidchat.de/chat?keycode=[/url]'.$uid_keycode.'§ion=main');
$browser->request($request);
print "Geht weiter?";
for($i = 0; $i < 10; $i++) {
my $response = $browser->post('[url=http://chat.rapidchat.de/]http://chat.rapidchat.de/[/url]',
['keycode' => $uid_keycode,
'section' => 'console',
'errortemplate' => '4247',
'command' => 'Hallo! Ich bin ein Bot der zählen kann- '.$i]);
$socket->read($data, 1024) until $socket->atmark;
print "Rapidchat-Server sagt:".$data;
sleep(5);
}
close($socket);
exit;
sub alarm_handle {
alarm(0);
exit 0;
}
Der Chat sieht so aus: http://www.fusion-clan.de/chat.php