2017-05-03 40 views
0

我不能得到的recv数据() 我想要的数据,在表单字段的用户输入Python不能在HTTP套接字服务器接收用户数据

代码:

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) 

输出:

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 

它似乎缺少一条线或东西我已经竭尽所能 我想要的数据在年底

+1

这似乎是一个奇怪的终止条件:'如果len(packet)

+0

我试过了:如果没有数据包:打破但它保持循环,所以我只是去了,它的工作 –

+0

如果你真的想实现自己的HTTP堆栈,请阅读[标准](https://www.ietf.org/ rfc/rfc2616.txt)而不是猜测。 HTTP请求由一个标题和一个由新行定界的可选正文组成,标题中给出了正文的大小。你不能仅仅使用愚蠢的'recv'来希望你得到一切,但你必须正确地处理HTTP协议。 –

回答

0

在Steffen正确观察到标题序列后,您已停止读取。下面的代码应该可以工作(小心,未经测试!):

def recvall(self, conn): 
    BUFF_SIZE = 4096 

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

它保持循环,不会中断 –

+0

@OmarAlhussani我修改了代码以便立即输出。看看它给你什么。我的猜测是客户端不会终止连接。 – DaSourcerer

相关问题