如何在Tornado请求中执行Tornado请求

时间:2015-11-13 00:50:58

标签: python tornado

我在Python 2.7中使用Tornado Web Server(版本4.1)来创建REST Web应用程序。我的一个请求处理程序(web.RequestHandler)使用multipart / mixed内容类型处理由多个HTTP请求组成的批处理请求,这些请求组合成一个HTTP请求。我目前有批处理请求处理程序能够接收POST请求并将multipart / mixed内容解析为单个请求,如下所示:

GET /contacts/3 HTTP/1.1
Accept: application/json

我的问题是,将这些内部批处理请求转换为Tornado可以在我的请求处理程序中提供服务的请求的好方法是什么?我想在我的批处理请求处理程序中收集响应,并且一旦这些请求全部完成,就返回包含所有批处理响应的单个多部分/混合响应。

使用HTTPClient执行批量处理的请求感觉就像是矫枉过正。看起来我应该能够构建一个请求对象并将其注入web.Application进行处理 - 但是我不知道如何做到这一点。谢谢!

1 个答案:

答案 0 :(得分:2)

龙卷风对此没有任何直接支持。通过HTTP客户端可能是最简单的解决方案。但是,如果您真的对避免该路线感兴趣,那么这里是解决方案的草图,它依赖于<?php if(!empty($_POST)) { if(empty($_POST['offered']) || empty($_POST['description'])) { ?> <div class="alert alert-warning alert-dismissible text-center" role="alert"> <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>Add some offers and descriptions </div> <?php } else { $title=$_POST['offered']; $offer=$_POST['description']; $data=array($page_id,$title,$offer); if($data) { $add=add_data($data); header('location:hotel1_galery.php?page_id=1 && msg=Add Offers Successfully'); } else if(!empty($_POST['offered']) && !empty($_POST['description'])) { ?> <div class="alert alert-danger alert-dismissible text-center" role="alert"> <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span><?php echo "Add offers and descriptions "; ?></div> <?php } } } 模块中定义的接口。

  1. 通过将tornado.httputilwrite的参数保存到内部缓冲区来定义实现HTTPConnection接口的类。

  2. write_headersHTTPServerConnectionDelegate。使用您的连接类的实例作为两个参数调用其Application方法(第一个参数并不重要,但它应该是唯一的,因为我们不会重复使用&#34;连接& #34;那个对象很好。)

  3. start_request返回HTTPMessageDelegate。调用其start_requestheaders_received(用于POST / PUT)和data_received方法来发出请求。调用finish后,处理程序将运行并重新调用连接对象。