0

我正在尝试使用 Crossbar 的重定向服务重定向 http 请求 (GET)。我正在为请求使用“curl”。重定向似乎工作正常,但我无法将我的(查询)参数传递到最终目的地。具体来说,我正在做:

curl -L "http://localhost:8008/redirection?num=15"

在 localhost:8008 正在运行交叉开关路由器。路径“/redirection”在 Crossbar 的配置文件中定义:

"redirection":{
    "type": "redirect",
    "url": "http://somewhere.com/something" 
},

服务器的响应(例如http://somewhere.com/something)是:

{
 "detail": "Missing query parameter 'num'",
 "status": 400,
 "title": "Bad Request",
 "type": "about:blank"
}

我究竟做错了什么?

4

1 回答 1

0

我找到了解决方案。我不确定这是否是正确的方法,但它正在工作。我在http.py文件中添加了几行代码,该文件位于以下路径:/usr/local/lib/python3.4/dist-packages/twisted/web。具体来说,我修改了Request类的函数redirect,如下图:

    def redirect(self, url):
    """
    Utility function that does a redirect.

    The request should have finish() called after this.
    """
    ##########    my code   ##########
    x = self.uri.split(b'?', 1)    #split
    if len(x) == 1:           
        self.path = self.uri          #there are no parameters
    else:
        self.path, argstring = x      #argstring = my query parameters 
        params = '?' + argstring.decode()
        url += params.encode()        #convert string parameters to bytes and append them to url 
    ################################

    self.setResponseCode(FOUND)
    self.setHeader(b"location", url)

因此,现在,“位置”具有新的 url +我的查询参数,并且重定向服务(Crossbar)正在将我的参数正确地传递到新的目的地。

如果有更好的解决方案(也许我可以改变横杆而不是扭曲的东西),让我知道!

于 2017-07-01T14:18:37.970 回答