我正在与一个服务器交谈,该服务器过去向我发送如下 HTTP 字符串:
/path/to/my/handler/?action-query&id=112&type=vca&info=ch=0&type=event&ev16[sts=begin (...)
因此“info”GET 参数包含“=”和“&”字符。这是相当非正统的,但我们还是为它编写了一个解析器。然而,最近他们决定对其中的一部分进行编码,所以现在字符串看起来像这样..
/path/to/my/handler/?action=query&id=112&type=vca&info=ch%3D0%26type%3Devent%26ev46[sts%3Dbegin (...)
这会破坏我们的解析器,它需要一个像第一个字符串一样的字符串。
我可以以某种方式“解码”该字符串,以便我可以使用旧代码(以便在我们重新编写解析器时它不会被破坏)吗?
根据下面的答案,我们可以使用 urllib.unquote() 来清理字符串。但是,我们依赖 request.GET,它是根据第一个字符串设置的。是否可以根据新转换的字符串重建 GET 对象,或者以某种方式强制它重新评估?
我怀疑你想要的是unquote
函数从urllib
module.
>>> s = '/path/to/my/handler/?action=query&id=112&type=vca&info=ch%3D0%26type%3Devent%26ev46[sts%3Dbegin'
>>> import urllib
>>> urllib.unquote(s)
'/path/to/my/handler/?action=query&id=112&type=vca&info=ch=0&type=event&ev46[sts=begin'
编辑:我对 Django 不太熟悉,但是其文档的请求和响应对象部分陈述如下:
QueryDict 实例是不可变的,除非您创建它们的 copy() 。这意味着您无法直接更改 request.POST 和 request.GET 的属性。
根据我对这些文档的有限阅读,您也许可以应用unquote()
函数到HttpRequest.body
属性并建立一个新的QueryDict
结果(如有必要,可能会用它来更新当前的结果)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)