Bonjour,
le 22/11/2010 à 15:52, Kevin Denis a écrit dans le message
:j'ai un très longue capture HTTP. Dans cette capture, j'ai des
parties texte (HTML, javascript, etc..) et des parties binaires (jpg,
gif, etc..).
La structure est connue:
HTTP/1.1 200 OK
(..des données d'entête)
<-- une ligne vide
des données (texte ou binaire, donc).HTTP/1.1 200 OK (et entetes, li gne
vide etc..)
J'ai donc bien un délimiteur de début (la ligne vide) et un de fin (le
HTTP/1.1 200 OK ou la fin de fichier).
Sur l'exemple que tu présentes, c'est l'inverse (d'abord le HTTP/1.1 200
OK puis la ligne vide).Avec des outils "classiques" (ni perl, ni python donc) comment extrair e
les données?
Si j'ai bien compris (supprimer tout ce qui est entre HTTP/1.1 200 OK e t
la ligne vide) :
sed -e '/^HTTP/1.1 200 OK$/,/^$/d'
Bonjour,
le 22/11/2010 à 15:52, Kevin Denis a écrit dans le message
<slrniel1jh.gef.kevin@slackwall.local.tux> :
j'ai un très longue capture HTTP. Dans cette capture, j'ai des
parties texte (HTML, javascript, etc..) et des parties binaires (jpg,
gif, etc..).
La structure est connue:
HTTP/1.1 200 OK
(..des données d'entête)
<-- une ligne vide
des données (texte ou binaire, donc).HTTP/1.1 200 OK (et entetes, li gne
vide etc..)
J'ai donc bien un délimiteur de début (la ligne vide) et un de fin (le
HTTP/1.1 200 OK ou la fin de fichier).
Sur l'exemple que tu présentes, c'est l'inverse (d'abord le HTTP/1.1 200
OK puis la ligne vide).
Avec des outils "classiques" (ni perl, ni python donc) comment extrair e
les données?
Si j'ai bien compris (supprimer tout ce qui est entre HTTP/1.1 200 OK e t
la ligne vide) :
sed -e '/^HTTP/1.1 200 OK$/,/^$/d'
Bonjour,
le 22/11/2010 à 15:52, Kevin Denis a écrit dans le message
:j'ai un très longue capture HTTP. Dans cette capture, j'ai des
parties texte (HTML, javascript, etc..) et des parties binaires (jpg,
gif, etc..).
La structure est connue:
HTTP/1.1 200 OK
(..des données d'entête)
<-- une ligne vide
des données (texte ou binaire, donc).HTTP/1.1 200 OK (et entetes, li gne
vide etc..)
J'ai donc bien un délimiteur de début (la ligne vide) et un de fin (le
HTTP/1.1 200 OK ou la fin de fichier).
Sur l'exemple que tu présentes, c'est l'inverse (d'abord le HTTP/1.1 200
OK puis la ligne vide).Avec des outils "classiques" (ni perl, ni python donc) comment extrair e
les données?
Si j'ai bien compris (supprimer tout ce qui est entre HTTP/1.1 200 OK e t
la ligne vide) :
sed -e '/^HTTP/1.1 200 OK$/,/^$/d'
Le 23-11-2010, Xavier a écrit :
Pourtant, son problème se torche en 10 lignes de Perl...
bon, s'il faut en passer par là, je prends les 10 lignes de perl.
Le 23-11-2010, Xavier <xavier@groumpf.org> a écrit :
Pourtant, son problème se torche en 10 lignes de Perl...
bon, s'il faut en passer par là, je prends les 10 lignes de perl.
Le 23-11-2010, Xavier a écrit :
Pourtant, son problème se torche en 10 lignes de Perl...
bon, s'il faut en passer par là, je prends les 10 lignes de perl.
j'ai un très longue capture HTTP. Dans cette capture, j'ai des
parties texte (HTML, javascript, etc..) et des parties binaires (jpg,
gif, etc..).
La structure est connue:
HTTP/1.1 200 OK
(..des données d'entête)
<-- une ligne vide
des données (texte ou binaire, donc).HTTP/1.1 200 OK (et entetes, ligne
vide etc..)
J'ai donc bien un délimiteur de début (la ligne vide) et un d e fin (le
HTTP/1.1 200 OK ou la fin de fichier).
sed -e '/^HTTP/1.1 200 OK$/,/^$/d'
non portable, sed ne permet pas de traiter les données binaires, hor mis
GNU sed.
un simple shell suffit (non testé, mais doit le faire... :)
j'ai un très longue capture HTTP. Dans cette capture, j'ai des
parties texte (HTML, javascript, etc..) et des parties binaires (jpg,
gif, etc..).
La structure est connue:
HTTP/1.1 200 OK
(..des données d'entête)
<-- une ligne vide
des données (texte ou binaire, donc).HTTP/1.1 200 OK (et entetes, ligne
vide etc..)
J'ai donc bien un délimiteur de début (la ligne vide) et un d e fin (le
HTTP/1.1 200 OK ou la fin de fichier).
sed -e '/^HTTP/1.1 200 OK$/,/^$/d'
non portable, sed ne permet pas de traiter les données binaires, hor mis
GNU sed.
un simple shell suffit (non testé, mais doit le faire... :)
j'ai un très longue capture HTTP. Dans cette capture, j'ai des
parties texte (HTML, javascript, etc..) et des parties binaires (jpg,
gif, etc..).
La structure est connue:
HTTP/1.1 200 OK
(..des données d'entête)
<-- une ligne vide
des données (texte ou binaire, donc).HTTP/1.1 200 OK (et entetes, ligne
vide etc..)
J'ai donc bien un délimiteur de début (la ligne vide) et un d e fin (le
HTTP/1.1 200 OK ou la fin de fichier).
sed -e '/^HTTP/1.1 200 OK$/,/^$/d'
non portable, sed ne permet pas de traiter les données binaires, hor mis
GNU sed.
un simple shell suffit (non testé, mais doit le faire... :)
bon, s'il faut en passer par là, je prends les 10 lignes de perl.
Un peu plus de 10 lignes mais c'est lisible (je pense) :
#!/usr/bin/perl
use strict;
use warnings;
my $filename = "capture_";
my ($in_header, $i, $fd) = (0, 1);
while (<>) {
if ($in_header) {
$in_header = 0 if /^$/;
} else {
if (/HTTP/1.1 200 OK/) {
open $fd, '>', "$filename" . $i++;
$in_header = 1;
} else {
print $fd $_ if defined $fd;
}
}
}
__END__
Ça écrit dans un fichier nommé "capture_XXX" avec XXX incrémenté
à chaque nouvelles données. J'ai considéré qu'il y avait toujours un
en-tête avant chaque donnée.
bon, s'il faut en passer par là, je prends les 10 lignes de perl.
Un peu plus de 10 lignes mais c'est lisible (je pense) :
#!/usr/bin/perl
use strict;
use warnings;
my $filename = "capture_";
my ($in_header, $i, $fd) = (0, 1);
while (<>) {
if ($in_header) {
$in_header = 0 if /^$/;
} else {
if (/HTTP/1.1 200 OK/) {
open $fd, '>', "$filename" . $i++;
$in_header = 1;
} else {
print $fd $_ if defined $fd;
}
}
}
__END__
Ça écrit dans un fichier nommé "capture_XXX" avec XXX incrémenté
à chaque nouvelles données. J'ai considéré qu'il y avait toujours un
en-tête avant chaque donnée.
bon, s'il faut en passer par là, je prends les 10 lignes de perl.
Un peu plus de 10 lignes mais c'est lisible (je pense) :
#!/usr/bin/perl
use strict;
use warnings;
my $filename = "capture_";
my ($in_header, $i, $fd) = (0, 1);
while (<>) {
if ($in_header) {
$in_header = 0 if /^$/;
} else {
if (/HTTP/1.1 200 OK/) {
open $fd, '>', "$filename" . $i++;
$in_header = 1;
} else {
print $fd $_ if defined $fd;
}
}
}
__END__
Ça écrit dans un fichier nommé "capture_XXX" avec XXX incrémenté
à chaque nouvelles données. J'ai considéré qu'il y avait toujours un
en-tête avant chaque donnée.
j'ai un très longue capture HTTP. Dans cette capture, j'ai des
parties texte (HTML, javascript, etc..) et des parties binaires (jpg,
gif, etc..).
J'ai donc bien un délimiteur de début (la ligne vide) et un de fin (le
HTTP/1.1 200 OK ou la fin de fichier).
Sur l'exemple que tu présentes, c'est l'inverse (d'abord le HTTP/1.1 200
OK puis la ligne vide).
Avec des outils "classiques" (ni perl, ni python donc) comment extraire
les données?
facile :-)Si j'ai bien compris (supprimer tout ce qui est entre HTTP/1.1 200 OK et
la ligne vide) :
sed -e '/^HTTP/1.1 200 OK$/,/^$/d'
non portable, sed ne permet pas de traiter les données binaires, hormis
GNU sed.
un simple shell suffit (non testé, mais doit le faire... :)
while read -r line; do
case $line in
# reponse ok
HTTP/1.1?200?OK) echo ok ;;
j'ai un très longue capture HTTP. Dans cette capture, j'ai des
parties texte (HTML, javascript, etc..) et des parties binaires (jpg,
gif, etc..).
J'ai donc bien un délimiteur de début (la ligne vide) et un de fin (le
HTTP/1.1 200 OK ou la fin de fichier).
Sur l'exemple que tu présentes, c'est l'inverse (d'abord le HTTP/1.1 200
OK puis la ligne vide).
Avec des outils "classiques" (ni perl, ni python donc) comment extraire
les données?
facile :-)
Si j'ai bien compris (supprimer tout ce qui est entre HTTP/1.1 200 OK et
la ligne vide) :
sed -e '/^HTTP/1.1 200 OK$/,/^$/d'
non portable, sed ne permet pas de traiter les données binaires, hormis
GNU sed.
un simple shell suffit (non testé, mais doit le faire... :)
while read -r line; do
case $line in
# reponse ok
HTTP/1.1?200?OK) echo ok ;;
j'ai un très longue capture HTTP. Dans cette capture, j'ai des
parties texte (HTML, javascript, etc..) et des parties binaires (jpg,
gif, etc..).
J'ai donc bien un délimiteur de début (la ligne vide) et un de fin (le
HTTP/1.1 200 OK ou la fin de fichier).
Sur l'exemple que tu présentes, c'est l'inverse (d'abord le HTTP/1.1 200
OK puis la ligne vide).
Avec des outils "classiques" (ni perl, ni python donc) comment extraire
les données?
facile :-)Si j'ai bien compris (supprimer tout ce qui est entre HTTP/1.1 200 OK et
la ligne vide) :
sed -e '/^HTTP/1.1 200 OK$/,/^$/d'
non portable, sed ne permet pas de traiter les données binaires, hormis
GNU sed.
un simple shell suffit (non testé, mais doit le faire... :)
while read -r line; do
case $line in
# reponse ok
HTTP/1.1?200?OK) echo ok ;;
Difficile. Les fichiers ne terminent pas forcément par un retour Chariot,
ce qui signifie que le HTTP/1.1 200 OK peut être directement accolé à
la fin d'un fichier binaire
Difficile. Les fichiers ne terminent pas forcément par un retour Chariot,
ce qui signifie que le HTTP/1.1 200 OK peut être directement accolé à
la fin d'un fichier binaire
Difficile. Les fichiers ne terminent pas forcément par un retour Chariot,
ce qui signifie que le HTTP/1.1 200 OK peut être directement accolé à
la fin d'un fichier binaire
Je me demande si vous ne sous-estimez pas HTTP. Par exemple, quid du
codage "chunked" ? (RFC 2616, section 3.6.1)
Autrement dit, la description du problème ci-dessus est un chouia
simpliste, et je ne pense pas qu'il y ait de solution simple dans le cas
général.
Il faut un vrai client HTTP, moins la partie réseau. Une rapide
recherche m'a amené à ça :
http://www.mail-archive.com//msg04065.html
et un autre truc pour perl :
http://search.cpan.org/~mala/HTTP-Response-Parser-0.02/
Je me demande si vous ne sous-estimez pas HTTP. Par exemple, quid du
codage "chunked" ? (RFC 2616, section 3.6.1)
Autrement dit, la description du problème ci-dessus est un chouia
simpliste, et je ne pense pas qu'il y ait de solution simple dans le cas
général.
Il faut un vrai client HTTP, moins la partie réseau. Une rapide
recherche m'a amené à ça :
http://www.mail-archive.com/httpclient-user@jakarta.apache.org/msg04065.html
et un autre truc pour perl :
http://search.cpan.org/~mala/HTTP-Response-Parser-0.02/
Je me demande si vous ne sous-estimez pas HTTP. Par exemple, quid du
codage "chunked" ? (RFC 2616, section 3.6.1)
Autrement dit, la description du problème ci-dessus est un chouia
simpliste, et je ne pense pas qu'il y ait de solution simple dans le cas
général.
Il faut un vrai client HTTP, moins la partie réseau. Une rapide
recherche m'a amené à ça :
http://www.mail-archive.com//msg04065.html
et un autre truc pour perl :
http://search.cpan.org/~mala/HTTP-Response-Parser-0.02/
Je n'ai pas envie de sortir l'interpréteur de commande pour ça.
Autant les classiques (awk, sed, etc..) sont bons pour traiter du
texte, autant je me demande comment ils vont réagir lorsqu'il y a du
binaire au milieu du texte. D'où ma question.
Je n'ai pas envie de sortir l'interpréteur de commande pour ça.
Autant les classiques (awk, sed, etc..) sont bons pour traiter du
texte, autant je me demande comment ils vont réagir lorsqu'il y a du
binaire au milieu du texte. D'où ma question.
Je n'ai pas envie de sortir l'interpréteur de commande pour ça.
Autant les classiques (awk, sed, etc..) sont bons pour traiter du
texte, autant je me demande comment ils vont réagir lorsqu'il y a du
binaire au milieu du texte. D'où ma question.
000007a0 04 05 10 00 00 00 2c 00 00 00 00 01 00 01 00 00 |......,.........|
000007b0 02 02 04 01 00 3b 48 54 54 50 2f 31 2e 31 20 32 |.....;HTTP/1.1 2|
000007c0 30 30 20 4f 4b 0d 0a 53 65 72 76 65 72 3a 20 41 |00 OK..Server: A|
000007d0 70 61 63 68 65 0d 0a 4c 61 73 74 2d 4d 6f 64 69 |pache..Last-Modi|
Et là, le readline ne passera sans doute pas..
000007a0 04 05 10 00 00 00 2c 00 00 00 00 01 00 01 00 00 |......,.........|
000007b0 02 02 04 01 00 3b 48 54 54 50 2f 31 2e 31 20 32 |.....;HTTP/1.1 2|
000007c0 30 30 20 4f 4b 0d 0a 53 65 72 76 65 72 3a 20 41 |00 OK..Server: A|
000007d0 70 61 63 68 65 0d 0a 4c 61 73 74 2d 4d 6f 64 69 |pache..Last-Modi|
Et là, le readline ne passera sans doute pas..
000007a0 04 05 10 00 00 00 2c 00 00 00 00 01 00 01 00 00 |......,.........|
000007b0 02 02 04 01 00 3b 48 54 54 50 2f 31 2e 31 20 32 |.....;HTTP/1.1 2|
000007c0 30 30 20 4f 4b 0d 0a 53 65 72 76 65 72 3a 20 41 |00 OK..Server: A|
000007d0 70 61 63 68 65 0d 0a 4c 61 73 74 2d 4d 6f 64 69 |pache..Last-Modi|
Et là, le readline ne passera sans doute pas..
Ça écrit dans un fichier nommé "capture_XXX" avec XXX incrémenté
à chaque nouvelles données. J'ai considéré qu'il y avait toujours un
en-tête avant chaque donnée.
C'est le cas. Mais le résultat n'est pas super convaincant. Voici le
début de la capture:
$ hexdump -C bigflow | head -20
00000000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d |HTTP/1.1 200 OK.|
00000010 0a 53 65 72 76 65 72 3a 20 41 70 61 63 68 65 0d |.Server: Apache.|
00000110 34 3a 33 32 20 47 4d 54 0d 0a 0d 0a 89 50 4e 47 |4:32 GMT.....PNG|
Ça écrit dans un fichier nommé "capture_XXX" avec XXX incrémenté
à chaque nouvelles données. J'ai considéré qu'il y avait toujours un
en-tête avant chaque donnée.
C'est le cas. Mais le résultat n'est pas super convaincant. Voici le
début de la capture:
$ hexdump -C bigflow | head -20
00000000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d |HTTP/1.1 200 OK.|
00000010 0a 53 65 72 76 65 72 3a 20 41 70 61 63 68 65 0d |.Server: Apache.|
00000110 34 3a 33 32 20 47 4d 54 0d 0a 0d 0a 89 50 4e 47 |4:32 GMT.....PNG|
Ça écrit dans un fichier nommé "capture_XXX" avec XXX incrémenté
à chaque nouvelles données. J'ai considéré qu'il y avait toujours un
en-tête avant chaque donnée.
C'est le cas. Mais le résultat n'est pas super convaincant. Voici le
début de la capture:
$ hexdump -C bigflow | head -20
00000000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d |HTTP/1.1 200 OK.|
00000010 0a 53 65 72 76 65 72 3a 20 41 70 61 63 68 65 0d |.Server: Apache.|
00000110 34 3a 33 32 20 47 4d 54 0d 0a 0d 0a 89 50 4e 47 |4:32 GMT.....PNG|