Flask应用中避免花括号被转义为HTML Unicode的问题
Flask API调用URL格式化问题
问题场景
在Flask应用中调用API时,尝试生成包含带前导零银行ID的URL,代码如下:
count = len(bankid) bankid = "044" response = requests.get(f"{base_api_url}/banks/" + "{bankid}/branches".format(bankid=f"{{{bankid}:0{count}d}}", headers=headers))
期望生成的目标URL:https://api.flutterwave.com/v3/banks/044/branches
但实际请求的URL被编码为:
GET /v3/banks/%7B044:03d%7D/branches HTTP/1.1" 401 65]
需要解决的核心问题:避免大括号被URL转义,生成符合预期的正确URL。
问题原因
代码中嵌套了多层字符串格式化逻辑,导致format方法将{{{bankid}:0{count}d}}解析为带转义的大括号表达式{044:03d},最终被URL编码为%7B044:03d%7D。
解决方案
根据bankid的实际类型,选择对应的简化写法:
1. 当bankid为字符串类型(当前场景)
直接通过f-string拼接即可,无需额外格式化操作:
bankid = "044" response = requests.get(f"{base_api_url}/banks/{bankid}/branches", headers=headers)
2. 当bankid为数字类型(如44)
如果需要将数字转为固定长度、带前导零的字符串,直接在f-string中完成格式化:
bankid = 44 target_length = 3 # 目标字符串长度 response = requests.get(f"{base_api_url}/banks/{bankid:0{target_length}d}/branches", headers=headers)
以上写法均可正确生成包含044的目标URL,不会出现大括号转义的问题。
内容的提问来源于stack exchange,提问作者George Udosen
相关产品推荐
相关产品推荐

