[python] requests 요청 시, 특정 문자에 대해 URL encoding을 방지 하는 방법

사용 목적

URL 문자열 중, path, query 등에서 url encoding이 실행되면 안되는 문자가 존재 할 경우 사용 가능

  • path 예: /login/index.php 등
  • query 예: ?a=1&b=2&c=a:3,b:'d' 등

방법

import requests

DO_NOT_ENCODING = '${}|'
for c in DO_NOT_ENCODING:
    requests.urllib3.util.url.PATH_CHARS.add(c) # path 인 경우
    requests.urllib3.util.url.QUERY_CHARS.add(c) # query 인 경우

s = requests.Session()
r = requests.Request(
    'POST',
    url,
    data=data,
    headers=headers,
)
pr = r.prepare()
pr.url = url + '?' + query
rs = s.send(pr, verify=False)
...

주의: urllib3 버전에 따라 다른것으로 보임. github에는 _PATH_CHARS, _QUERY_CHARS로 되어 있음

참고자료

Comment