2017-03-28 6 views
0

GET 요청을 처리하는 앱이 있습니다. 와일드 카드로 %을 사용하여 쿼리하는 패턴을 보유하는 변수를 읽었습니다. URL에 patt=M%이 포함되어 있으면 M으로 시작하는 모든 이름을 가져옵니다. 검색 패턴으로 %D0을 사용하려고 시도 할 때까지 모두 정상적으로 작동했습니다.URL의 처리 백분율 기호

내가 https://www.w3schools.com/tags/ref_urlencode.asp를 사용하여 발견 한 것처럼

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

가의 %D0 문자열이 아닌 유니 코드 문자 코드로 취급되고있다 : 나는 다음과 같은 오류가 발생합니다.

이제 질문은 : %D0과 같은 패턴을 처리하는 방법은 무엇입니까? 다른 말로하면, 이것을 인코딩하지 않고 어떻게 3 개의 문자로 처리 할 수 ​​있을까요? 내가 지금까지 발견했습니다

한 가지 해결 방법은 patt=%25D를 사용하여 같은 % 대신 %25을 사용하는 것입니다 -하지만 실제로 핸들 요청을 필요 것입니다.

편집 : 예입니다. 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()) 

당신이 URL을 열 수 있습니다 실행 일단 - 기본적으로 그것을가 http://localhost:8080/?myVar=blahblahblah

그것은 페이지가 열립니다에서 시작해야하며 반환 myVar에 값 : blahblahblah

지금, http://localhost:8080/?myVar=%D0

이 나는 ​​것을 방지하고 싶습니다 오류가 발생합니다보십시오.

물론 http://localhost:8080/?myVar=%25D0은 잘 작동하고 %D0을 보여줍니다.

+0

. urlencoded URI 부분은 모두 cherrypy에 의해 자동으로 해독 된 다음 처리기로 전달됩니다. 일반적으로 브라우저는 URL도 자동으로 urlencode합니다. 그래서 당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 커스텀 클라이언트를 가지고 있다면 물론 적절한 URL을 인코딩해야합니다. – webKnjaZ

+0

목표는 브라우저 주소 표시 줄에 필요한 마스크를 직접 배치하는 것이 었습니다. 맞춤 클라이언트는 없으며 Chrome, Firefox 또는 기타 브라우저 만 사용할 수 있습니다. 하지만 지금은 이것이 가능하지 않다고 생각하기 시작합니다. 그리고 나서 자신을 인코딩하고 리디렉션 할 텍스트 상자를 추가해야합니다. – Maciejg

+0

사용자가 주소 표시 줄에 수동으로 쿼리를 입력하겠습니까? 입력이있는 양식이 있으면 자동으로 인코딩해야합니다. – webKnjaZ

답변

1

다음과 같이 URL에 해당 문자를 처리 할 수 ​​따옴표를 방법을 사용할 수 있습니다 : 의도 한대로 작동

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

코드 샘플을 사용하여 제 질문을 약간 개선했습니다. 그것은 urllib을 사용하지 않습니다. 이것을 봐주세요. – Maciejg