伊迪蒂:我为不清楚道歉。
我将提供几个值。第一个是我使用我的前端应用程序调用的URL。第二个是调用urllib.unquote
之前的值。第三个是调用urlib.unquote
后的值。在
前端:
console.log('http://localhost:8080/v1/' + encodeURIComponent(name))
后端:
^{pr2}$例如
http://localhost:8080/v1/https%3A%2F%2Fgoogle.com
* https:%2F%2Fgoogle.com
** https://google.com
例2。在
http://localhost:8080/v1/foo%2520bar
* foo%20bar
** foo bar
例3。在
http://localhost:8080/v1/foo%20bar
* foo bar
** foo bar
谢谢你的耐心和帮助。我很抱歉在我原来的帖子里说不清楚。在
编辑:简而言之,如果我调用/v1/%2520
,param在函数末尾等于" "
,而不是{"%20"
,而不是{
我目前正在使用python2.7开发一个Flask应用程序。在
我正在尝试创建一个可以处理URL参数的函数。在
@app.route('/v1/<param>', methods=['DELETE'])
def f(param=''):
param = urllib.unquote(param)
在我的前端应用程序中,我通过编码param
来调用这个函数。但是,如果我将"foo bar"
和"foo%20bar"
传递给函数,param
将解析为相同的值"foo bar"
,而实际上{
由于此错误,我无法删除"foo%20bar"
项。如果我试图删除它,它将删除"foo bar"
,一旦"foo bar"
被删除,"foo%20bar"
条目将永远不会被删除。在
我相信这是因为"%20"
不等于"%2520"
,尽管这是参数。当我在调用urllib.unquote(param)
之前打印这个值时,它已经等于"%20"
。然后,当我调用urllib.unquote(param)
时,该值被更改为" "
。在
我不太确定这是否是Flask/Werkzeug中的一个bug,但它导致我的应用程序无法工作。在
你对解决这个问题有什么建议吗?谢谢!在
不,Flask通常处理百分比编码。URL中的参数是百分比编码的,当WSGI环境被设置时,这些参数会被解码。当匹配时,烧瓶会把这个传给你的路线。在
如果您不需要再次解码参数值,请删除您的
urllib.unquote()
调用。在您的浏览器实际上会为您将URL中的空格编码为
%20
,即使位置栏将显示一个空格。位置栏对百分比编码的组件进行解码,以便能够读取国际字符(例如,%E3%81%A9%E3%81%86%E3%82%82%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86
显示为どうもありがとう
)。在如果您遇到了编码斜杠(^ {< CD5>},^ {CD6>})的问题,那么请参阅issue #900,考虑到具有Apache指令(以及其他WSGi服务器)的边缘情况。您需要使用
<path:param>
组件来匹配这些组件,因为默认的string
参数类型与斜杠不匹配。在如果我使用以下名为
routetest.py
的测试脚本:使用
^{pr2}$FLASK_APP=routetest flask run
在localhost:5000
上启动此脚本,则无法重现您的问题:这只能意味着您有一个WSGI服务器错误地处理了路径中的引用。在
我认为问题是你不理解URL编码:) 它需要避免空格,因此浏览器会将它们转换为%20,然后通过烧瓶自动返回。 更多信息请阅读:https://www.w3schools.com/tags/ref_urlencode.asp
解决方案:使用
foo%2520bar
将编码的foo%20bar
发送到服务器。在相关问题 更多 >
编程相关推荐