J'ai un petit problème de reception de données. Voilà j'envoi une requete sur le port 80 et ensuite je voudrais récupèrer la reponse du serveur. Le problème c'est que je ne recoit pas la totalité des données ...
InitNetwork()
Host.s = "www.siteduzero.com"
Request.s = "GET /index.php HTTP/1.1"+#CRLF$+"Host: www.siteduzero.com"+#CRLF$+"Connection: Keep-Alive"+#CRLF$+#CRLF$
Conn = OpenNetworkConnection(Host, 80)
If Conn
SendNetworkData(Conn, @Request, Len(Request))
Delay(500)
Result.s
Repeat
Buffer.s = Space(1024)
Received = ReceiveNetworkData(Conn, @Buffer, 1024)
Debug Received
Result+Trim(Buffer)
Until Received < 1024
Debug Result
Else
Debug "erreur"
EndIf
En effet, le serveur ne complete pas toujours le buffer du coup la boucle s'arrete et je n'ai pas la totalité du code source de la page
Quelqu'un a-t-il une solution pour savoir quand les données ont fini d'etre transmises ?
A mon avis, on ne devrait utiliser ReceiveNetworkData() qu'après un évenement #PB_NetworkEvent_Data en testant NetworkClientEvent(Connection).
Par exemple (non testé) :
Si tu ne connais pas la longueur des données à télécharger, tu peux ajouter un test sur le contenu.
Exemple, sur la balise </html> qui devrait signaler la fin du fichier HTML que tu télécharges :
Ouais c'est vrai ... mais ça ne fonctionne pas pour tous les sites exemple: google, la dernière balise est </script>.
C'est bete quand meme il pourrait y avoir un evenement #pb_NetworkEvent_Disconnect coté client ca arrangerait pas mal de chose .
Quand on a la longueur ca va, mais quand on ne l'a pas ...
Voir http://www.purebasic.fr/english/viewtopic.php?p=217199
Avec les fonctions natives de PB, je ne sais pas. Je ne pense pas que GetHTTPHeader() revoie ces informations (?).
On peut toujours utiliser ReceiveHTTPFile(), mais les données sont écrites dans un fichier, pas en mémoire.