You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者주식마스터

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:36:04