Falcon服务接收多参数仅第一个生效,如何调整客户端与服务端代码?
问题核心原因
- 客户端执行curl时,shell会把
&识别为后台运行命令的标识符,导致time=1参数没有被实际发送到服务端 - 你使用的服务端路由为
/func,curl调用时路径写为/servicedb,路由不匹配也会导致请求异常 - Falcon框架已内置查询参数解析能力,无需手动拆分URI解析,手动解析容易出现编码、格式兼容问题
客户端正确调用方式
二选一即可:
- 用引号包裹整个URL,避免shell解析特殊字符:
curl 'http://localhost:8000/func?limit=12&time=1'
- 转义
&字符:
curl http://localhost:8000/func?limit=12\&time=1
服务端正确代码
直接使用Falcon Request对象内置的params属性获取所有解析完成的查询参数,更稳定可靠:
import falcon import os waitTime = int(os.environ.get('WAIT_TIME', '2')) class SomeFunc(object): def on_get(self, req, response): # 直接获取所有查询参数 decoded_params = req.params print(decoded_params) # 也可以单独获取指定参数,支持设置默认值、类型校验 limit = req.get_param_as_int('limit', default=10) time_val = req.get_param_as_int('time') api = falcon.API() api.add_route('/func', SomeFunc())
调用后控制台会输出完整参数:
{'limit': '12', 'time': '1'}
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

