德编码URL参数(De-encode URL parameters)

2019-06-25 19:19发布

我跟那个用来发送HTTP我的字符串这样的服务器:

/path/to/my/handler/?action-query&id=112&type=vca&info=ch=0&type=event&ev16[sts=begin (...)

因此,“信息” GET参数包括“=”和“&”字符。 这是相当非正统但尽管如此,我们写了一个解析器它。 然而,最近他们决定将编码它的一部分,所以现在的字符串看起来是这样的..

/path/to/my/handler/?action=query&id=112&type=vca&info=ch%3D0%26type%3Devent%26ev46[sts%3Dbegin (...)

这打破了我们的分析器,它预计像第一个字符串。

我可以采用某种“去编码”的字符串,这样我可以使用旧代码(这样它不破,我们重新写解析器)?

按下面的答案,我们可以使用urllib.unquote()清洁串起来。 但是,我们都是靠request.GET中,它被建立了基于第一个字符串。 是否有可能重构基于新的转换后的字符串的GET对象,或以某种方式迫使它重新评估?

Answer 1:

我怀疑你想要什么unquote从功能urllib模块。

>>> 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实例是不可变的,除非你创建它们的副本()。 这意味着你不能直接改变request.POST和request.GET中的属性。

根据我有限的文档阅读,你也许可以在申请unquote()函数来HttpRequest.body属性,并建立一个新QueryDict出来的结果(也可能用它来更新当前如有必要)。



文章来源: De-encode URL parameters