Python Flask中request.args.get无法获取完整URL参数的解决问题
问题根因
&是URL标准规定的查询参数分隔符,你当前的请求地址中,url参数值内部的&scope=8会被服务端识别为/short接口的独立查询参数,不属于url参数的值,因此request.args.get("url")只能取到&之前的内容。
解决方案
推荐方案:传参端对URL值做编码
这是符合HTTP规范的处理方式,传递前将需要作为url参数值的完整链接做encodeURIComponent编码,特殊符号会被转义:
?转义为%3F&转义为%26/转义为%2F
编码后完整的请求地址为:https://example.com/short?url=https%3A%2F%2Fexample.com%2Fauthorize%3Fclient_id%3D869029507019%26scope%3D8
此时服务端直接用原有代码的request.args.get("url")即可拿到完整的原始URL,Flask会自动完成解码操作,无需额外修改业务代码。
兼容方案:服务端拼接剩余查询参数
如果无法修改传参端的逻辑,可以在服务端将除url之外的所有查询参数拼接回URL值内,修改后的代码如下:
from urllib.parse import urlencode @app.route("/short") def profilepage(): url = request.args.get("url") if url is None: return '{"code": 400, "message": "url missing"}' # 拼接剩余的所有查询参数到url末尾 extra_params = request.args.copy() extra_params.pop("url") if extra_params: url += "&" + urlencode(extra_params) url = formaturl(url) randomlink = id_generator() client.insert_one({"link": randomlink, "redirect": url}) return '{"code": 200, "message": "https://linker.kro.kr/' + randomlink + '"}'
内容的提问来源于stack exchange,提问作者주식마스터
相关产品推荐
相关产品推荐

