2017-05-03 3 views
0

je ne peux pas obtenir les données dans recv() Je veux que les données que les entrées de l'utilisateur dans les champs de formulairePython ne peut pas recevoir les données utilisateur dans le serveur socket HTTP

code:

def recvall(self, conn): 
    BUFF_SIZE = 4096 # 4 KiB 
    data = "" 

    while True: 

     packet = conn.recv(BUFF_SIZE).decode('utf-8') 
     data += packet 

     if len(packet) < BUFF_SIZE: 
      break 

    print (data) 

sortie:

POST /search HTTP/1.1 
Host: localhost 
Connection: keep-alive 
Content-Length: 14 
Cache-Control: max-age=0 
Origin: http://localhost 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Referer: http://localhost/ 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US,en;q=0.8 

Il semble manquer une ligne ou quelque chose que j'ai tout essayé je veux que les données à la fin

+1

Cela semble une condition de terminaison étrange: 'si len (paquet)

+0

j'ai essayé: sinon paquet: pause mais il a gardé la boucle donc je suis allé avec cela et cela a fonctionné –

+0

Si vous voulez vraiment implémenter votre propre pile HTTP s'il vous plaît lire le [standard] (https://www.ietf.org/ rfc/rfc2616.txt) au lieu de simplement deviner. La requête HTTP est constituée d'un en-tête et d'un corps facultatif délimité par une nouvelle ligne et la taille du corps est indiquée dans l'en-tête. Vous ne pouvez pas utiliser simplement 'recv' dans l'espoir que vous obteniez tout, mais vous devez réellement traiter correctement le protocole HTTP. –

Répondre

0

Vous avez cessé de lire après la séquence d'en-tête comme Steffen correctement observé. Le code suivant devrait fonctionner (attention, non testé!):

def recvall(self, conn): 
    BUFF_SIZE = 4096 

    while True: 
     packet = conn.recv(BUFF_SIZE) 
     if not packet: 
      break 
     print packet.decode('utf-8') 
+0

il continue à boucler et ne casse pas –

+0

@OmarAlhussani J'ai modifié le code pour sortir tout de suite. Vois ce que ça te donne. Ma conjecture est que le client ne met pas fin à la connexion. – DaSourcerer