谷歌应用引擎_method?

时间:2010-09-12 19:12:51

标签: python google-app-engine

如何将请求正文传递给我的观点?

class RestHTTPMiddleware(object):
  def __init__(self, app):
    self.app = app

  def __call__(self, environ, start_response):
    request = Request(environ)
    environ['wsgi.input'] = StringIO.StringIO(request.body)

    method = webapp.Request(environ).get('_method')

    if method:
      environ['REQUEST_METHOD'] = method.upper()

    return self.app(environ, start_response)

当我测试时:

def put(self):
    logging.info("spot put %s", self.request.get("name"))

记录以下内容:“spot put”但没有值。

这是如何实施的:

def main():  
  app = webapp.WSGIApplication([
    (r'/spot/new/$', Spot),
    ],
   debug=True)
  # run_wsgi_app(application)
  wsgiref.handlers.CGIHandler().run(RestHTTPMiddleware(app))

1 个答案:

答案 0 :(得分:0)

我认为你几乎就是这个代码。如果在创建Request实例后运行fp.seek(0),您是否尝试查看它是否有效?

我还应该注意这是一个危险的黑客攻击!这允许我欺骗你的Web服务器,让我们相信<img src="http://yourserver.com/?_method=POST&delete_account=1">是来自查看我网站的用户的合法POST请求。显而易见:出于安全考虑,这是危险的。 除非你确信你有其他机制可以抵消这个潘多拉的CSRF噩梦,否则不要这样做。