我正在运行金字塔作为我的API服务器。最近,当将查询字符串参数传递到RESTful API服务器时,我们开始将查询字符串参数按顺序提取。例如,到/v1/finishedGoodRequests?exact=true&id=39&join=OR&exact=false&name=39的GET被init上的RESTful api模块记录为request.url:
v1/finishedGoodRequests?join=OR&name=39&exact=true&exact=false&id=39 使用request.query_string: join=OR&name=39&exact=true&exact=false&id=39
我处理查询参数是为了限定搜索,在这种情况下,id恰好是名称中的39或39。哪种可能的服务器设置或错误会潜入到服务器代码中以导致这样的事情?它仍然是MultiDict..。
发布于 2020-05-26 18:37:11
作为一个简单的例子,这对我来说很好,而且MultiDict总是保持顺序,所以我怀疑您正在堆栈中使用的东西正在重写一些东西。
from pyramid.config import Configurator
from pyramid.view import view_config
from waitress import serve
@view_config(renderer='json')
def view(request):
return list(request.GET.items())
config = Configurator()
config.scan(__name__)
app = config.make_wsgi_app()
serve(app, listen='127.0.0.1:8080')
$ curl http://localhost:8080\?join=OR\&name=39\&exact=true\&exact=false\&id=39
[["join", "OR"], ["name", "39"], ["exact", "true"], ["exact", "false"], ["id", "39"]]根据您正在使用的WSGI服务器,通常您可以查看environ来查看原始的url,这可能很方便。服务生没有,所以只需在管道中放置一些很高的东西(wsgi中间件),它可以注销environ['QUERY_STRING']并查看它是否与堆栈中较低的某个位置不匹配。
https://stackoverflow.com/questions/61332572
复制相似问题