Python TPCServer rfile.read block

标签 python httprequest tcpserver

我正在编写一个简单的 SocketServer.TCPServer 请求处理程序 (StreamRequestHandler),它将捕获请求以及 header 和消息正文。这是为了伪造一个我们可以用于测试的 HTTP 服务器。

我可以轻松获取请求行或 header 。

如果我尝试从 rfile 中获取比现有内容更多的内容,代码就会阻塞。如何在不知道其大小的情况下获取所有请求正文?换句话说,我没有 Content-Size header 。

这是我现在的一个片段:

def _read_request_line(self):
    server.request_line = self.rfile.readline().rstrip('\r\n')

def _read_headers(self):
    headers = []
    for line in self.rfile:
        line = line.rstrip('\r\n')
        if not line:
            break
        parts = line.split(':', 1)
        header = (parts[0].strip(), parts[0].strip())
        headers.append(header)
    server.request_headers = headers

def _read_content(self):
    server.request_content = self.rfile.read()  # blocks

最佳答案

Keith 的评论是正确的。这是它的样子

     length = int(self.headers.getheader('content-length'))
     data = self.rfile.read(length)

关于Python TPCServer rfile.read block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12626427/

相关文章:

javascript - 在发送 JavaScript 之前拦截 XHR 并更改请求 header 和 url

python PIL : IOError: cannot identify image file

javascript - 更改 iframe src 时如何设置自定义 http header ?

iphone - Python APNs 不处理请求

ios - Swift和API:解码JSON树

java - 是否可以让非阻塞服务器和阻塞 I/O 客户端进行通信?

go - 如何在 net.Conn.Write() 中编写用户定义的结构对象

c - 多线程服务器设计

python - 用户只能看到他的数据 Django

将 Python 脚本放入 plone 模板以呈现对象列表