我正在使用BaseHTTPRequestHandler来实现我的httpserver。我如何在do_PUT / do_POST中读取多行发布数据?
编辑:我正在尝试实现一个独立的脚本来管理一些自定义请求,比如服务器上的监听器,它整合/存档/从各种日志文件中提取,我不希望实现需要Web服务器的东西,我对python没有太多经验,如果有人能指出更好的解决方案,我将不胜感激。
Edit2:我不能使用任何外部库/模块,我必须使用普通的vanilla python 2.4 / java1.5 / perl5.8.8,限制性策略,我的双手并列
答案 0 :(得分:5)
获取请求正文就像从self.rfile
读取一样简单,但如果客户端使用Connection: keep-alive
,您必须知道要读取多少内容。如果客户端指定Content-Length
标题...
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
print post_data
server = HTTPServer(('', 8000), RequestHandler)
server.serve_forever()
...如果客户端使用chunked transfer encoding发送数据会变得更复杂。