部分代码:
#平台限制,只能用 Python2.x 实现
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('0.0.0.0',80)
sock.listen(1)
下面是 recv 应该收到的完整数据(HTTP 请求):
POST /data/fetchdata HTTP/1.1
Host: www.demo.com
Accept: application/json
Accept-Encoding: gzip, deflate
Content-Length: 8
Cookie: debug=1
Connection: closed
result=1
一开始为了接收数据写的的代码:
buf=''
While True:
buf = buf + client.recv(1024)
if not buf or len(buf)==0:
break #结果是从来不 break
再试
buf = client.recv(4096)
这个只能收到一部分数据(HTTP response body 收不到)。这里有个问题,无论把 buffer 调整多大,第一次 recv 的返回值总是 HTTP response header 部分的数据,很奇怪
后来试了
buf = client.recv(1024) #成功接收 HTTP response header
print "123"
buf = client.recv(1024) #应该接收 HTTP response body,但是一直 blocking
print "456"
这样的,发现 456 根本不输出。
快速 Google 之后也没发现什么适合的解决方法,唯一一个靠谱点的是用 try except 配合自定义 timeout 来检测是否 blocking,缺点就是在网络环境比较恶劣的情况下(比如我现在的)也会丢数据。
向大家求教,谢谢!