2017-05-10 5 views
0

J'utilise tornado 4.3 en python 2.7. Je veux rediriger une requête à un autre exemple one.For, quand je POST http://127.0.0.1/, je veux qu'il affichage à https://myip.ipip.net/.This peut être fait par nginx à l'aide ci-dessous confComment tornado set_status 307

return 307 $scheme://myip.ipip.net$request_uri; 

Mais maintenant, l'URL cible est pas toujours la même façon Je ne peux pas coder en dur dans nginx. Comme mon serveur est tornado, je devrais le faire fonctionner en utilisant du code. Comme nous le savons tornado prend en charge le code HTTP en utilisant self.set_status(HTTP_CODE). Mais quand je mets 307 il répond 302 au client. Qu'est-ce qui ne va pas?

Voici mon code

import tornado.ioloop 
import tornado.web 

class MainHandler(tornado.web.RequestHandler): 
    def post(self): 
     self.set_status(307) 
     self.redirect("https://myip.ipip.net/") # 

application = tornado.web.Application([ 
    (r"/", MainHandler), 
]) 

if __name__ == "__main__": 
    application.listen(8888) 
    tornado.ioloop.IOLoop.instance().start() 

Voici mon test avec curl.Tornado responsed 302 si je mets 307.

curl -LI 127.0.0.1:8888 -XPOST

résultat est inférieur

HTTP/1.1 302 Found 
Date: Wed, 10 May 2017 07:31:17 GMT 
Content-Length: 0 
Content-Type: text/html; charset=UTF-8 
Location: https://myip.ipip.net/ 
Server: TornadoServer/4.3 

HTTP/1.1 200 OK 
Server: NewDefend 
Date: Wed, 10 May 2017 07:31:18 GMT 
Content-Type: text/plain; charset=utf-8 
Content-Length: 69 
Connection: keep-alive 
X-Cache: from ctl-zj-122-228-198-138 

Remerciez vous!

+0

J'ai trouvé raison dans le code source ... 'self.redirect (url, permanent = False, status = None)', l'état par défaut est 302 ou 301 ..., état Dirige tout dans self.redirect peut faire .. –

Répondre

1

redirect takes a status parameter:

class MainHandler(tornado.web.RequestHandler): 
    def post(self): 
     self.redirect("https://myip.ipip.net/", status=307) 
+0

Oui, je le fais fonctionner de cette façon.Merci! –