Halihallo Forumer
so. Jetzt hatte ich endlich Zeit das ganze auch auszuprobieren und es funktioniert perfekt, naja, fast, sonst müsste ich hier nicht schreiben ;)... Danke nochmals für deine Beispiele, Christian; ich hoffe du erlaubst, dass ich diese gleich verwendet habe (ging einfach schneller, als alles nochmal selber zu programmieren).
Alles, bis auf google.ch funktioniert. GET/POST Daten, Cookies, ... einfach alles, bis auf diesen Google... Wenn ich nämlich diese Seite lade, dann geht der Browser in eine Endlosschlaufe und lädt die Page immer neu. Ich glaube, dass es an dem Status 302 hängt bzw. an Proxy-Connection: Keep-Alive??? - Mal schaun, was ihr dazu meint:
Viele Grüsse
Philipp
PS: Ganz unten noch der momentane Code...
Request on http://www.google.ch/
Request-Header:
Proxy-Connection: Keep-Alive
Host: www.google.ch
Cookie: PREF=ID=2ee932854a6b966a:LD=de:TM=1029179593:LM=1029179593:S=yXSkNolyuIg
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Accept-Language: de
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Request-Content: (Length: )
Request answer from http://www.google.ch/
HTTP/1.0 302 Found
Content-Length: 151
Connection: Close
Server: GWS/2.0
Content-Type: text/html
Date: Sat, 17 Aug 2002 12:39:38 GMT
Location: http://www.google.ch/
Set-Cookie: PREF=ID=1a0d0e7e7e467b7d:TM=1029587978:LM=1029587978:S=oKKDkzioSrA; domain=.google.com; path=/; expires=Sun, 17-Jan-2038 19:14:07 GMT
----
proxi.pl
#!/usr/bin/perl
use IO::Socket::INET;
use LWP::Simple;
my $socket = new IO::Socket::INET( LocalAddr => 'localhost',
LocalPort => 8080,
Listen => 5,
Reuse => 1,
Proto => 'tcp' )
or die 'cannot initialise listener';
my %hosts = ( 'http://www.thedorcx.ch/' => 'http://127.0.0.1/www.thedorcx.ch/',
'http://www.kodex.ch/' => 'http://127.0.0.1/www.kodex.ch/',
'http://www.test.ch/' => 'http://127.0.0.1/www.test.ch/' );
einige Domain-Referer, genau das, wozu ich den Proxi verwende...
also die Ursache, warum ich erst angefangen habe zu programmieren.
open( LOG, '>>./log.txt' );
while ( my $sock = $socket->accept ) {
my %headers; my %_headers;
$headers{_firstline} = <$sock>;
while(<$sock>) {
last if m/^\s*$/;
if(m/^(\S+): (.*)$/) {
my $n = $1; my $v = $2;
$n =~ s/\015|\012//g;
$v =~ s/\015|\012//g;
$headers{$n} = $v;
$_headers{lc $n} = $v;
}
}
my $data='';
if($headers{_firstline} =~ /^POST/) {
read $sock, $data, $_headers{'content-length'};
}
$request = $headers{_firstline};
$request =~ /^(.*?) (.*) HTTP/(.*?)$/i;
my $url = $2;
my $method = $1;
my $vers = $3;
while ( my ($host, $vd_refer) = each %hosts ) {
$url =~ s/$host/$vd_refer/ig;
}
my $server = (split ///, $url)[2];
delete $headers{_firstline};
print LOG 'Request on '.$url."\n";
print 'Request on '.substr($url,0,64)."...\n";
print LOG ' Request-Header:'."\n";
while ( my ($n,$v) = each %headers ) {
print LOG ' ' x 6 . $n . ': ' . $v . "\n";
}
print LOG ' Request-Content: (Length: '.$_headers{'content-length'}.')'."\n";
if (length $data) {
print LOG $data . "\n";
}
my $ssock = new IO::Socket::INET(
PeerAddr => $server,
PeerPort => 80,
Type => SOCK_STREAM,
Timeout => 120
) or next;
delete $headers{Connection} if exists $headers{Connection};
print $ssock "$method $url HTTP/$vers\015\012";
foreach (keys %headers) {
print $ssock $_.": ".$headers{$_}."\015\012";
}
print $ssock "Connection: close\015\012\015\012";
print $ssock $data;
print LOG ' Request answer from '.$url."\n";
my $log = 1;
while ( <$ssock> ) {
if ($_ =~ /^\s*$/) { $log = 0; }
print LOG ' ' x 6 . $_ if $log;
print $sock $_;
}
}
close LOG;