Schrift
[thread]12184[/thread]

Probleme mit Compress::Zlib::memGzip

Leser: 1


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
burnersk
 2008-07-15 16:13
#112138 #112138
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich versuche gerade, für eines meiner Projekte, eine GZIP Kompremierung mit CPAN:Compress::Zlib zu realisieren.
Das Resultat soll dann an den Browser gesandt und dort angezeit werden.

Momentan sieht mein Code wie folgt aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl -wt
use Compress::Zlib;
use Digest::MD5 qw(md5_hex);
my $now = "Tue, 15 Jul 2008 12:06:38 GMT";
my $content = 'testtesttesttesttesttesttesttesttesttest';
$content = &Compress::Zlib::memGzip("$content");
print("HTTP/1.1 200 OK\n");
print("Allow", ": ", "GET, POST", "\n");
print("Connection", ": ", "close", "\n");
print("Content-Encoding", ": ", "gzip", "\n");
print("Content-Length", ": ", length($content), "\n");
print("Content-MD5", ": ", &md5_hex($content), "\n");
print("Content-Type", ": ", "text/plain", "; ", "charset=UTF-8", "\n");
print("Date", ": ", "$now", "\n");
print("Last-Modified", ": ", "$now", "\n");
print("Server", ": ", "Neu1/1.0", "\n");
print("\n");
print("$content");

Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
HTTP/1.1 200 OK
Allow: GET, POST
Connection: close
Content-Encoding: gzip
Content-Length: 27
Content-MD5: 05e38f2fe0fb73e564c5c4a8d9fb580e
Content-Type: text/plain; charset=UTF-8
Date: Tue, 15 Jul 2008 12:06:38 GMT
Last-Modified: Tue, 15 Jul 2008 12:06:38 GMT
Server: Neu1/1.0

‹+I-.)!/)¨(


Nun sollte doch der Browser doch nach meinem Verständnis "testtesttesttesttesttesttesttesttesttest" als Plaintext ausgeben und nicht "‹+I-.)!/)¨(".
Fehlt bei mir noch ein Header-Field, oder was mache ich falsch? Oder ist es im Endeffekt ein Fehler von FF3 und ich hab alles richtig gemacht?
pq
 2008-07-15 16:39
#112144 #112144
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich habe das skript mal etwas verkleinert bzw. lesbarer gemacht:
Code (perl): (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
#!/usr/bin/perl -t
use strict;
use warnings;

use Compress::Zlib;
use Digest::MD5 qw(md5_hex);
my $now = "Tue, 15 Jul 2008 12:06:38 GMT";
my $content = 'testtesttesttesttesttesttesttesttesttest';
$content = Compress::Zlib::memGzip("$content");
my $l = length($content);
my $md5 = md5_hex($content);
#HTTP/1.1 200 OK - das schickt doch der webserver eh
print <<"EOM";
Allow: GET, POST
Connection: close
Content-Encoding: gzip
Content-Length: $l
Content-MD5: $md5
Content-Type: text/plain; charset=UTF-8
Date: $now
Last-Modified: $now
Server: Neu1/1.0

EOM
print $content;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
nepos
 2008-07-15 17:21
#112146 #112146
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also, bei mir klappt das. Sehe den unkomprimierten Klartext.
renee
 2008-07-15 17:22
#112147 #112147
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nicht alle Browser können mit "Content-Encoding: gzip" umgehen...
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/
burnersk
 2008-07-15 17:24
#112148 #112148
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
renee+2008-07-15 15:22:27--
Nicht alle Browser können mit "Content-Encoding: gzip" umgehen...


Danke fürs testen Leute...
Dann kann wohl FF3 mit gzip noch nichts anfangen. Oder kennt jemand eine Lösung, die bei allen Browsern und vor alle dem auf Linux CPAN und Windows ActivePerl PPM funktioniert?
GwenDragon
 2008-07-15 17:45
#112149 #112149
User since
2005-01-17
14746 Artikel
Admin1
[Homepage]
user image
Wieso soll FF3 nichts mit gzip anfangen können?
Mozilla kann das seit 1998!
http://www.mozilla.org/projects/apache/gzip/

Es sendet doch sogar:
GET /test/zlib.pl HTTP/1.1
Host: test
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9) Gecko/2008052906 Firefox/3.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
burnersk
 2008-07-15 17:57
#112150 #112150
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
Nun,

bei nepos funktionierts. Bei mir kommt im FF3
Quote
Fehlerhafte Kodierung der Inhalte

Die Webseite, die Sie öffnen möchten, kann nicht angezeigt werden, da sie eine ungültige oder unbekannte Form der Kompression verwendet.

Die aufgerufene Seite kann nicht angezeigt werden, da sie eine ungültige oder nicht unterstützte Form der Kompression verwendet.
* Bitte kontaktieren Sie die Website-Betreiber, um sie über dieses Problem zu informieren.



Und:
Nicht jedes Perl Script läuft durch den Webbrowser.... dieses hier z. B. nicht. Ich kann vom Auftrag aus nicht die Behandlung von irgendwelchen Webservern voraussetzen, sondern muss es selbst mit IO::Socket machen
pq
 2008-07-15 18:06
#112151 #112151
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
burnersk+2008-07-15 15:24:09--
Danke fürs testen Leute...
Dann kann wohl FF3 mit gzip noch nichts anfangen. Oder kennt jemand eine Lösung, die bei allen Browsern und vor alle dem auf Linux CPAN und Windows ActivePerl PPM funktioniert?

hast du denn mal das geänderte skript ausprobiert? wenn ja, dann sag das doch wenigstens.
und wenn nicht, dann sag, warum nicht.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
burnersk
 2008-07-15 18:14
#112152 #112152
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
pq+2008-07-15 16:06:12--
hast du denn mal das geänderte skript ausprobiert? wenn ja, dann sag das doch wenigstens. und wenn nicht, dann sag, warum nicht.


Ich habe den Fehler gefunden. Ich darf leider nicht das gesamte Script freilegen, deswegen habe ich nur die "relevanten" Teile kopiert.
Ich habe oben noch:
Code (perl): (dl )
1
2
3
use utf8;
use bytes;
use encoding 'utf8';

Wenn ich es in ablage.pl ohne dem teste funktionierts.
Leider alle anderen Scripte nicht mehr. Weis jemand hier für eine Lösung?
GwenDragon
 2008-07-15 18:16
#112153 #112153
User since
2005-01-17
14746 Artikel
Admin1
[Homepage]
user image
Mein Skript sendet brav den gzip-Stream an den Browser.
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
#!/usr/bin/perl 
use strict;
use warnings;
use Compress::Zlib;
use Digest::MD5 qw(md5_hex);
use Data::Dumper;
my $now = "Tue, 15 Jul 2008 12:06:38 GMT";
my $content = '';
$content .= "$_ test test test test test \n" for (1..1000);
my $b = Compress::Zlib::memGzip("$content") or die("Compression: $!");
my $l = length($b) or die ('buffer has no length');
my $md5 = md5_hex($b) or die ('md5 not calculated');
print <<HTTP;
Allow: GET, POST
Connection: close
Content-Encoding: gzip
Content-Length: $l
Content-MD5: $md5
Content-Type: text/plain
Date: $now
Last-Modified: $now

HTTP
binmode(STDOUT);
print("$b");

my $log;
if (open($log, '>', '/tmp/z.log')) {
binmode($log);
print $log $b;
close($log);
}

Im Log kannst du sehen, dass der Inhalt Gzip-kodiert ist.
Die Magic-Bytes für Gzip sind nämlich: \x1f\x1b
http://schmidt.devlib.org/file-formats/gzip-archiv...
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2008-07-15 16:13.