Page 1 sur 1

[resolu] - Bug Debug

Publié : lun. 11/mars/2013 14:14
par doudouvs
Arff j'ai chercher comme un fou pourquoi dans Debug je n'arrive pas a faire la récupération TOTAL d'un code html.
En rajoutant un MessageRequester j'ai compris Grrrrrr un Debug qui BUG

Cela doit être uniquement de l'affichage car quand on copie/colle de la fenêtre Debug dans un fichier text le code est compler

Code : Tout sélectionner

Global Window_0

Declare  Connect()
InitNetwork() 
#PB_send = 1

If OpenWindow(#PB_Any, 100, 500, 350, 170, "", #PB_Window_SystemMenu)
  Button_Connect = ButtonGadget(#PB_send, 70, 110, 100, 25, "Send")
  
  Repeat
    Event = WaitWindowEvent()
    Select Event
        
      Case #PB_Event_Gadget
        Select EventGadget()
            
          Case 1
            Connect()
        EndSelect
        
    EndSelect
    
  Until Event = #PB_Event_CloseWindow
  
EndIf

Procedure Connect()
  #TimeOut = 5
  Host.s = "goolge.fr" 
  Arg.s = "?q=purebasic"
  Request.s = "GET /" + Arg + " HTTP/1.1"+#CRLF$+"Host: " + Host +#CRLF$+"Connection: Keep-Alive"+#CRLF$+#CRLF$ 
  Conn = OpenNetworkConnection(Host, 80) 
  If Conn 
    SendNetworkData(Conn, @Request, Len(Request)) 
    Result.s 
    TimeOut = Date() + #TimeOut
    Repeat 
      If NetworkClientEvent(Conn) = #PB_NetworkEvent_Data 
        Buffer.s = Space(1024) 
        Received = ReceiveNetworkData(Conn, @Buffer, 1024) 
        Recu.s = Left(Buffer, Received)
        Result.s + Recu    
        MessageRequester("Done!","Your Data" + Chr(13) + Chr(10) + Recu,0) 
        
        Debug  Recu
        
        If Right(Recu, 4) = #CRLF$ + #CRLF$
          Break
        EndIf
        TimeOut = Date() + #TimeOut
      EndIf 
      If Date() > TimeOut
        Break
      EndIf
      Delay(10)
    ForEver 
  EndIf
  CloseNetworkConnection(Conn) 
EndProcedure

Re: Bug Debug

Publié : lun. 11/mars/2013 15:38
par omega
Salut

Essayes de placer la procedure connect() avant son appel

Bonne journée

Re: Bug Debug

Publié : lun. 11/mars/2013 15:57
par doudouvs
Salut,

Cela ne change rien, c'est vraiment un problème d'affichage de la fenêtre Debug.
quand j'affiche le resultat dans MessageRequester le texte est complet.

Je me suis juste demander pourquoi il n'afficher pas tout, j'ai chercher sur les caractères spéciaux pure perte de temps

Bonne journée à toi

Re: Bug Debug

Publié : lun. 11/mars/2013 17:41
par nico
J'ai testé, tout est dans le debugger mais c'est vrai qu'à un certain moment il tronque mais c'est normal.

Re: Bug Debug

Publié : lun. 11/mars/2013 18:11
par doudouvs
nico a écrit :J'ai testé, tout est dans le debugger mais c'est vrai qu'à un certain moment il tronque mais c'est normal.
Le debugger est justement là pour vérifier ce que l'on ne vois pas, je pense pas que cela soit normal de tronquer

Re: Bug Debug

Publié : mar. 12/mars/2013 13:42
par cederavic
Peut etre à cause d'un retour de chariot ou d'un tab, une connerie du genre... Voir meme peut-etre une chr(0)?

Re: Bug Debug

Publié : mar. 12/mars/2013 15:59
par Ar-S
Je pense que ton soucis vient de là

Code : Tout sélectionner

If Right(Recu, 4) = #CRLF$ + #CRLF$
 	Break
EndIf

Re: Bug Debug

Publié : mar. 12/mars/2013 19:09
par GallyHC
Bonjour,

tu utilise dans ta routine le protocole 1.1 perso je dirais vu ce que j'ai du faire comme test, que le protocol 1.0 pose moin de problème et evite des caractères non voulu (genre sans regarde dans ta fonction avant le code html tu as un truc du genre "7e3a", un code hexadecimal de 4 caractères).

Donc le seul changement c juste de mettre "HTTP/1.0" a la place de "HTTP/1.1".

Voila c'est mon avis je ne sais pas si cela va résoudre ton problème...

Cordialement,
GallyHC

Re: Bug Debug

Publié : mar. 12/mars/2013 20:14
par nico
Tu peux faire quelque chose comme ça pour y voir plus clair:

Code : Tout sélectionner

Macro DebugCHR(Texte)
  CompilerIf #PB_Compiler_Debugger = #True
    Texte = RemoveString(Texte, Chr(10))
    count.l = CountString(Texte, Chr(13))
    For a = 1 To count +1
      Debug StringField(Texte, a, Chr(13))
    Next a
  CompilerEndIf
EndMacro


Global Window_0

Declare  Connect()
InitNetwork() 
#PB_send = 1

If OpenWindow(#PB_Any, 100, 500, 350, 170, "", #PB_Window_SystemMenu)
  Button_Connect = ButtonGadget(#PB_send, 70, 110, 100, 25, "Send")
  
  Repeat
    Event = WaitWindowEvent()
    Select Event
        
      Case #PB_Event_Gadget
        Select EventGadget()
            
          Case 1
            Connect()
        EndSelect
        
    EndSelect
    
  Until Event = #PB_Event_CloseWindow
  
EndIf

Procedure Connect()
  #TimeOut = 5
  Host.s = "goolge.fr" 
  Arg.s = "?q=purebasic"
  Request.s = "GET /" + Arg + " HTTP/1.1"+#CRLF$+"Host: " + Host +#CRLF$+"Connection: Keep-Alive"+#CRLF$+#CRLF$ 
  Conn = OpenNetworkConnection(Host, 80) 
  If Conn 
    SendNetworkData(Conn, @Request, Len(Request)) 
    Result.s 
    TimeOut = Date() + #TimeOut
    Repeat 
      If NetworkClientEvent(Conn) = #PB_NetworkEvent_Data 
        Buffer.s = Space(1024) 
        Received = ReceiveNetworkData(Conn, @Buffer, 1024) 
        Recu.s = Left(Buffer, Received)
        Result.s + Recu    
        ;MessageRequester("Done!","Your Data" + Chr(13) + Chr(10) + Recu,0) 
        
        DebugCHR(Recu)
        
        If Right(Recu, 4) = #CRLF$ + #CRLF$
          Break
        EndIf
        TimeOut = Date() + #TimeOut
      EndIf 
      If Date() > TimeOut
        Break
      EndIf
      Delay(10)
    ForEver 
  EndIf
  CloseNetworkConnection(Conn) 
EndProcedure

Re: Bug Debug

Publié : mar. 12/mars/2013 20:43
par doudouvs
Nickel la macro, je connaissais pas

J'avais bien vu que les sauts de ligne poser un problème

Code : Tout sélectionner

#CR => Chr(13))
#LF => Chr(10))
@nico Merci d'avoir mis la lumière

@GallyHC
Non pas de 1.0 j'ai un Connection: Keep-Alive dans l'entête
Pour info l'HTTP 1.0 ne permet pas de connection persistante, L'HTTP 1.1 utilise des connections persistantes ce qui permet de passer plusieurs requêtes sans sans attendre de réponse.

Re: [resolu] - Bug Debug

Publié : mar. 12/mars/2013 21:04
par nico
De rien, je viens d'ailleurs de corrigé, j'avais mis if au lieu de CompilerIf.

Re: [resolu] - Bug Debug

Publié : mer. 13/mars/2013 9:38
par brossden
Bonjour à tous

Juste un petit bug que j'ai relevé la commande :CloseNetworkConnection(Conn) doit être insérée avant le EndIf car si OpenNetworkConnection(Host, 80) n’aboutit pas on ne peut pas fermer une connexion qui n'existe pas ...