Leser: 21
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
package main;
use strict;
use Data::Dump qw(dump);
my $sockattr = {
'host' => 'rolfrost.de',
'uri' => '/cgi-bin/100.cgi',
'callback' => \&cb,
};
my $s = Net::HTTP10->new($sockattr);
$s->request;
#my($code, $mess, $href) = $s->read_headers or die;
#printf "Status: %s Mesg: %s \nHeaders: %s\n", $code, $mess, dump $href;
$s->body_callback;
sub cb{
my $socket = shift;
while(read $socket, my $buf, 4){
printf "%u\n", unpack "N", $buf;
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new(); my $service = 'http://rolfrost.de/cgi-bin/100.cgi'; my $res = $ua->get($service); if($res->is_success) { my $content=$res->decoded_content(charset => 'none'); printf("%u\n",$_) for(unpack("N*", $content)); } else { warn "request failed...\n"; }
2011-03-21T19:53:36 topegÜber die Callbackfunktion (LWP::UserAgent::progress) und Begrenzen der Chunkgröße in LWP auf 4Byte (Ist per Default auf 4096 Byte gesetzt mein ich) könnte man das Verhalten deines Scriptes recht genau imitieren.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new(); my $service = 'http://rolfrost.de/cgi-bin/100.cgi'; my $res=$ua->get($service, ':read_size_hint' => 4, ':content_cb' => sub { my ($data, $response, $protocol) = @_; printf("%u\n",unpack('N', $data)); }); if ($res->is_success) { print "OK\n"; } else { print "ERROR\n"; }
1
2
3
4
5
6
7
8
9
10
11
12
use strict;
use LWP::UserAgent;
use HTTP::Request;
my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new('GET', 'http://rolfrost.de/cgi-bin/100.cgi');
$ua->request($request, \&callback, 4);
sub callback{
printf "%u\n", unpack "N", shift;
}
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
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new(); my $service = 'http://www.heise.de'; my $request = HTTP::Request->new('GET', $service); my $buffer=''; my $res=$ua->request($request, sub { my ($data, $response, $protocol) = @_; $buffer.=$data; while(length($buffer) >= 794) { $data=substr($buffer,0,794,''); printf("%03u\n",length($data)); } }); if ($res->is_success) { print "OK\n"; } else { print "ERROR\n"; }
2011-03-22T16:16:08 topegDa bleibt die Frage wieso du überhaupt auf HTTP setzt. Es wäre um einiges einfacher den Server auf einen eigenen Port zu setzen und darüber die Kommunikation zu machen. da gibt es eine Menge Module zu.
Wenn du die http Anfrage brauchst um den das Script auf dem server zu starten, so kannst dem Client mitteilen auf welchem Port der Client verbinden soll, den Serverprozess forken wenn er nicht läuft und die Kommunikation dann darüber machen.
Auf diese Weise hättest du sehr viel mehr Kontrolle bis runter zur TCP-Paketgröße, zudem reduzierst du den Overhead der Kommunikation.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
d:\home>pma.pl -h rolfrost.de
SQL an Host: rolfrost.de
Mehrzeilige Eingabe, senden mit ^Z in neuer Zeile
select version()
^Z
DB-Verbindung OK
Aktion: sql
Ergebnis: 1 Rows
5.1.51
Script beenden mit ^Z oder neues mehrzeiliges Statement eingeben und senden mit ^Z in neuer Zeile
^Z
d:\home>du weißt, das du tust?
Der Befehl "du" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.