gpt4 book ai didi

python - klein 脚本 CSS 不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:05 24 4
gpt4 key购买 nike

我有一个非常简单的 klein 脚本,它只是一个反向代理:

from klein import run, route, Klein
from twisted.web.proxy import ReverseProxyResource

@route('/')
def home(request, branch=True):
return ReverseProxyResource('www.example.com', 80, ''.encode('utf-8'))

run("MY_IP", 80)

唯一的问题是,当网站使用相对路径 /css/example 调用 CSS 时,CSS 不起作用;我不知道如何解决这个问题。我愿意接受任何建议。

我使用的是 Python-3.3。

最佳答案

基于您的代码的第一 block 是我的第一遍,但它不起作用。

它似乎适用于类似 GET /a 的东西,但那是因为/<path>不包括额外的/的。因此,任何比一层更深的内容都不会被代理。

调查@route ,它使用 werkzeug下面似乎不允许任意通配符:

from klein import run
from klein import route
from twisted.web.proxy import ReverseProxyResource

@route('/', defaults={'path': ''})
@route('/<path>')
def home(request, path):
print "request: " + str(request)
print "path: " + path
return ReverseProxyResource('localhost', 8001, path.encode('utf-8'))

run("localhost", 8000)

如果您下拉到twisted不过,您可以简单地执行以下操作:

# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.

"""
This example demonstrates how to run a reverse proxy.

Run this example with:
$ python reverse-proxy.py

Then visit http://localhost:8000/ in your web browser.
"""

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

site = server.Site(proxy.ReverseProxyResource('www.example.com', 80, ''))
reactor.listenTCP(8000, site)
reactor.run()

如果你想捕获、记录、修改等每个请求,你可以子类 ReverseProxyResource并覆盖render() 。注意:您还必须覆盖 getChild()由于 bug :

from twisted.internet import reactor                                            
from twisted.web import proxy
from twisted.web import server
from twisted.python.compat import urlquote

class MyReverseProxyResource(proxy.ReverseProxyResource):

def __init__(self, host='www.example.com', port=80, path='', reactor=reactor):
proxy.ReverseProxyResource.__init__(self, host, port, path, reactor)

def getChild(self, path, request):
# See https://twistedmatrix.com/trac/ticket/7806
return MyReverseProxyResource(
self.host, self.port, self.path + b'/' + urlquote(path, safe=b"").encode('utf-8'),
self.reactor)

def render(self, request):
print request
return proxy.ReverseProxyResource.render(self, request)


p = MyReverseProxyResource()
site = server.Site(p)
reactor.listenTCP(8000, site)
reactor.run()

输出:

<Request at 0x14e9f38 method=GET uri=/css/all.css?20130620 clientproto=HTTP/1.1>
<Request at 0x15003b0 method=GET uri=/ clientproto=HTTP/1.1>

关于python - klein 脚本 CSS 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com