处理网址中的百分号

时间:2017-03-28 14:08:32

标签: python http cherrypy

我有一个处理GET请求的应用。我读取了一个变量,该变量包含使用%作为通配符进行查询的模式。因此,如果网址包含patt=M%,我将获取以M开头的所有名称。一切正常,直到我尝试使用%D0作为搜索模式。我收到以下错误:

The given query string could not be processed. Query strings for this resource must be encoded with 'utf8'.

正如我发现使用https://www.w3schools.com/tags/ref_urlencode.asp一样,%D0字符串被视为非unicode字符的代码。

现在的问题是:如何处理%D0这样的模式?换句话说:如何在没有编码的情况下将其视为三个字符?

到目前为止,我发现的一种解决方法是使用%25代替%,例如使用patt=%25D - 但我需要实际处理请求。

编辑: 这是一个例子。让我们从tutorial获取基本的cherrpy示例。我刚修改它以处理params并返回myvar的值:

import cherrypy

class HelloWorld(object):
    @cherrypy.expose
    def index(self, **params):
        #return "Hello world!"
        return cherrypy.request.params['myVar']


if __name__ == '__main__':
    cherrypy.quickstart(HelloWorld())

一旦它正在运行,你可以打开网址 - 默认情况下它应该从http://localhost:8080/?myVar=blahblahblah开始

它打开一个页面并返回myVar值:blahblahblah

现在,试试http://localhost:8080/?myVar=%D0

这会导致我想要阻止的错误。

当然http://localhost:8080/?myVar=%25D0工作正常并显示%D0

1 个答案:

答案 0 :(得分:1)

您可以使用引用方法在网址中处理这些字符,如下所示:

import urllib
print urllib.quote("patt=M%")