[http-client] - récupérer une requete complète sans passer par les sockets asynchrones

Contenu du snippet

Hello !
Etant tout nouveau dans ce merveilleux monde qu'est python, je suis content de mettre en ligne ma première source python ;-)
Je travail beaucoup sur le protocole HTTP et je n'arrête pas d'avoir des problèmes avec la fonction recv() du module socket.
Pour recevoir une entête et tout le contenu envoyé par le serveur (dans le cadre d'un client HTTP), j'ai du user de ruses pour arriver a récupérer l'intégralité des paquets dans un buffer et arrêter la fonction recv() sans passer par le mode asynchrone ni les threads.
Il s'agit d'une (toute) petite astuce, je m'excuse d'avance si quelqu'un d'autre l'a postée avant moi.

Source / Exemple :


def HTTPRecv(Socket):
	sResult = ''
	while 1:
		sResult += Socket.recv(1024)
		if ( ord(sResult[-1:]) == 10 ):
			break
		
	return sResult

Conclusion :


En fait, le fonctionnement est très simple : je reçois les paquets dans un buffer de 1024 bytes. Je concatène au résultat final et je teste le dernier caractère : si il s'agit du caractère <LF>, je stop l'exécution de la boucle et je renvoi le résultat final.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.