Bonjour,
Je suis entrain d'écrire plusieurs classes permettant de faire des requêtes HTTP/HTTPS et gérant les différent scenarii d'authentification définis dans ces protocoles.
En HTTP 1.1, l'usage de réponses "chunkées" me déroute à plusieurs égards et notamment dans la lecture du contenu du socket.
De ce que j'ai compris, un serveur HTTP 1.1 va diviser la réponse à faire en plusieurs morceaux et les envoie au fil de l'eau précédés de leur taille en octets.
J'utilise massivement Boost.asio et me suis inspiré de cet exemple : http://www.boost.org/doc/libs/1_53_0...ync_client.cpp
Je l'ai complétement repris pour fusionner les deux approches synchrones/asynchrones et ajouter HTTPS/SSL.
En mode synchrone, je cherche à mettre l'intégralité du contenu du socket dans un std::stringstream avant de passer à la phase de traitement (c'est pareil en asynchrone en fait mais avec une spécificité supplémentaire qui complexifierait l'explication ici).
Néanmoins, dans le cas de réponses longues (une page HTML, par exemple http://www.infos-reseaux.com sur lequel je fais mes tests) je n'ai pas la totalité de la réponse. La lecture s'arrête à un endroit complétement arbitraire qui ne laisse rien entrevoir sur le pourquoi de la chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
Sur des réponses bien plus courtes, par exemple :http://www.infos-reseaux.com/service...poData.Owner/2
J'ai le tout sans problème.
Le fait que la réponse soit chunkée ne permet pas de connaitre à l'avance la taille totale de la réponse du coup je vois mal comment déterminer une condition de fin de lecture.
Je crois que c'est ce qui pose problème ici.
Est-ce que quelqu'un a une expérience en la matière?
Merci par avance & bon week end

 

 
		
		 
        

 
			
			

 
   


 Lecture intégrale du socket lors d'une réponse HTTP 1.1
 Lecture intégrale du socket lors d'une réponse HTTP 1.1
				 Répondre avec citation
  Répondre avec citation

 
  
  
 
 
			 
   
 
 
				 A méditer: La solution la plus simple est toujours la moins compliquée
A méditer: La solution la plus simple est toujours la moins compliquée
Partager