文章内容

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()


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - Flask request.args.get ‘+’ 转义相关问题总结

分享到:

发表评论

评论列表