2

inのrender_GETメソッドから、完全に別のURLにリダイレクトすることは可能ですか(他の場所でホストされています)Resourcetwisted

request.redirect(url)何もしていないようで、どちらもしませんtwisted.web.util.Redirect

phpで同等のものは、

header('location:'.$url);

編集

これは私が実行しているコードです

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

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

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

3 に答える 3

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()
于 2012-10-25T21:18:07.973 に答える
3

Locationヘッダーには絶対URLが必要です。例:http://example.com

302見つかった応答コードは、新しい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、ツイストプラグインを使用して、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
于 2012-10-26T02:50:31.520 に答える
1

request.redirect(url)を使用してから呼び出すことでリダイレクトできるはずですrequest.finish()。呼び出していることを確認してくださいrequest.finish()

于 2012-10-25T20:25:41.253 に答える