如何在python 2.7服务器

时间:2018-01-23 20:00:11

标签: python python-2.7

我有一个客户端应用程序正在使用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存档写入磁盘以便稍后执行。 我找到的解决方案都使用内容长度标头,有没有办法将内容写入磁盘而没有此标头?

或者这是客户的问题?是否需要它发送内容长度标题?我的理解是,如果数据被分块,则不需要内容长度标题。

谢谢你, 亚历

0 个答案:

没有答案