Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Detecter un retour chariot CR, LF ou CRLF

1 réponse
Avatar
Kevin Denis
Bonjour,

Dans un script, comment détecter à coup sur un retour chariot?

Je suis en train d'écrire un micro serveur web à base de script shell.
L'écoute se fait à l'aide de socat.

Or, cela ne fonctionne pas avec tous les clients.

Mon script récupère basiquement les en-têtes envoyés par le client:
#! /bin/bash
content=entete
while [ ! "$content" == "" ]
do
read content
echo $content >> log
done

echo "HTTP/1.0 OK"
(...)

Et cela fonctionne avec wget par exemple. La première ligne d'entete
envoyé par le client est récupéré dans mon fichier de log, puis wget
m'affiche le fichier.
Or, avec links, cela ne fonctionne pas. La raison en est simple, mon
fichier de log me montre que toutes les lignes sont terminées par ^M
et donc ma boucle while ne termine jamais.

D'ou ma question: un client web doit terminer ses entetes par deux retours
chariot successifs; dit autrement, il doit renvoyer une ligne d'entete
vide.
Comment détecter cette ligne vide à coup sur quel que soit le client
et la manière dont il code ses fins de lignes?
Merci
--
Kevin

1 réponse

Avatar
Stephane CHAZELAS
2008-08-05, 09:03(+00), Kevin Denis:
[...]
Comment détecter cette ligne vide à coup sur quel que soit le client
et la manière dont il code ses fins de lignes?


[...]

Enleve les CR

CR=$(printf 'r')
while
IFS= read -r line &&
line=${line%"$CR"} &&
[ -n "$line" ]; do
...
done

Mais quelle idee saugrenue d'utiliser un shell script for un
serveur web!? C'est juste demander du trouble.

--
Stéphane