我有一个客户端应用程序正在使用PUT请求' PUT'源URL处的zip存档。 我正在尝试验证PUT请求中的内容。我的测试框架是在python中,所以我试图启动一个基本的python服务器来监听PUT请求并写入文件' PUT'到磁盘。
我想使用simpleHTTPServer,但它不支持PUT。
python -m SimpleHTTPServer 9009 在0.0.0.0端口9009上提供HTTP服务... [23 / Jan / 2018 06:49:52]代码501,消息不支持的方法(' PUT') [23 / Jan / 2018 06:49:52]" PUT /a3866ad0-004c-11e8-99b0-ab49af452a48.zip HTTP / 1.1" 501
我想我可以为PUT编写自己的自定义requestHandler类,并根据其长度将内容写入磁盘,但PUT没有内容长度标题,所以我也不能这样做。
class SputHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_PUT(self):
print "headers"
print self.headers
print "---- done headers ----"
length = int(self.headers["Content-Length"])
with open("myTestZip.zip", "wb") as f:
f.write(self.rfile.read(length))
然而,似乎文件是' PUT'在多个块中,因为没有内容长度'标题,我看到' transfer-encoding'标题为' chunked'。 我可以在打印的标题中看到内容长度不存在。
在0.0.0.0端口8000上提供HTTP服务... 头 主持人:myHostNameBlah:8000 content-type:application / zip 连接:关闭 Transfer-Encoding:chunked
----完成标题---- 处理请求时发生异常 (' clientIpAddress',47362)回溯(最近一次调用最后一次):文件 " C:\ Python27 \ lib \ SocketServer.py",第290行,in _handle_request_noblock self.process_request(request,client_address)file" C:\ Python27 \ lib \ SocketServer.py",318行,在process_request中 self.finish_request(request,client_address)文件" C:\ Python27 \ lib \ SocketServer.py",第331行,在finish_request中 self.RequestHandlerClass(request,client_address,self)File" C:\ Python27 \ lib \ SocketServer.py",第652行, init self.handle()File" C:\ Python27 \ lib \ BaseHTTPServer.py",第340行,句柄 self.handle_one_request()文件" C:\ Python27 \ lib \ BaseHTTPServer.py",第328行,在handle_one_request中 方法()文件" tserver.py",第10行,在do_PUT中 length = int(self.headers [" Content-Length"])文件" C:\ Python27 \ lib \ rfc822.py",第393行, getitem return self.dict [name.lower()] KeyError:' content-length'
是否有一个simpleHTTPServer PUT处理程序实现,它允许我将PUT zip存档写入磁盘以便稍后执行。 我找到的解决方案都使用内容长度标头,有没有办法将内容写入磁盘而没有此标头?
或者这是客户的问题?是否需要它发送内容长度标题?我的理解是,如果数据被分块,则不需要内容长度标题。
谢谢你, 亚历