扭曲的位置标题重定向

时间:2012-10-25 20:21:20

标签: python redirect http-headers location twisted

来自render_GETResource的{​​{1}}方法,是否可以完全重定向到其他网址(在其他地方托管)

twisted似乎没有做任何事情,request.redirect(url)

也没有

php中的等价物是,

twisted.web.util.Redirect

修改

这是我正在运行的代码

header('location:'.$url);

3 个答案:

答案 0 :(得分:4)

我最后在另一张海报的帮助下完成了这项工作,request.finish(),重定向包括http://并返回NOT_DONE_YET

from twisted.web import server, resource
from twisted.internet import reactor

class Simple(resource.Resource):
    isLeaf = True
    def render_GET(self, request):
        request.redirect("http://www.google.com")
        request.finish()
        return server.NOT_DONE_YET

site = server.Site(Simple())
reactor.listenTCP(8080, site)
reactor.run()

答案 1 :(得分:3)

Location header requires absolute url,例如http://example.com

302 Found响应代码说我们应该提供一个带有指向新URI的超链接的简短超文本注释。 redirectTo()正是这样做的:

from twisted.web import server, resource
from twisted.web.util import redirectTo
from twisted.internet import reactor

class HelloResource(resource.Resource):
    isLeaf = True

    def render_GET(self, request):
        return redirectTo('http://example.com', request)

reactor.listenTCP(8080, server.Site(HelloResource()))
reactor.run()

或使用Redirect

from twisted.web import server
from twisted.web.util import Redirect
from twisted.internet import reactor

reactor.listenTCP(8080, server.Site(Redirect("http://example.com")))
reactor.run()

或者只使用web twistd插件,放入redirect.rpy文件:

from twisted.web.util import Redirect

resource = Redirect("http://example.com")

运行:

$ twistd -n web --port tcp:8080:localhost --resource-script redirect.rpy

仅供演示,以下是redirectTo()的实现方式:

def redirect_to(url, request):
    request.setResponseCode(302) # Found
    request.setHeader("Location", url)
    request.setHeader("Content-Type", "text/html; charset=UTF-8")
    return """put html with a link to %(url)s here""" % dict(url=url) # body

答案 2 :(得分:1)

您应该可以使用request.redirect(url)重定向,然后调用request.finish()。请确认您正在呼叫request.finish()