文章内容
2023/1/3 17:04:11,作 者: 黄兵
Flask request.args.get ‘+’ 转义相关问题总结
今天在处理查询的时候,出现了一些 user-agent 无法被查询到的情况,但是直接查询数据库,却是可疑查得到。
下面是前端提交查询的一个例子:
return this.http.get<AccessLogModel>(`${this.requestIPCrawler}/suspicious?ua=${ua}`, {
headers: new HttpHeaders().set('Authorization', this.auth.accessToken)
});
后端使用的是 Flask,获取数据:
get_ua = request.args.get('ua', None, str)
查询数据:
c_query = db.session.query(CrawlerSuspicious.id).filter_by(user_agent=get_ua.strip()) \
.order_by(CrawlerSuspicious.create_time.desc())
但是却是空,我是用 MySQL 客户端却是可以查询到数据。
经过检查,前端提交的 ua 示例为:
Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)
通过 request.args.get 获取到的数据为:
Mozilla/5.0 (compatible; AhrefsBot/7.0; http://ahrefs.com/robot/)
通过比较,可以看出来,将 “+” 变成空格。
我们可以在前端对提交的数据经行转义,具体代码如下:
return this.http.get<AccessLogModel>(`${this.requestIPCrawler}/suspicious?ua=${encodeURIComponent(ua)}`, {
headers: new HttpHeaders().set('Authorization', this.auth.accessToken)
});
这样就可以解决这个问题了。
参考资料:
1、Flask: flask.request.args.get replacing '+' with space in url
2、mdn web docs - encodeURIComponent()
黄兵个人博客原创。
评论列表