IT이야기

Python에서 URL 매개 변수를 백분율 인코딩하는 방법은?

cyworld 2022. 3. 8. 21:54
반응형

Python에서 URL 매개 변수를 백분율 인코딩하는 방법은?

하면

url = "http://example.com?p=" + urllib.quote(query)
  1. 인코딩이 안 된다./%2F(OAuth 정규화 중단)
  2. 유니코드를 처리하지 않음(예외를 발생)

더 좋은 도서관이 있을까?

파이톤 2

설명서:

urllib.quote(string[, safe])

%xx 이스케이프를 사용하여 문자열의 특수 문자를 교체하십시오.문자, 숫자, 문자 '_yod'는 절대 인용되지 않는다.기본적으로 이 기능은 URL의 경로 섹션을 인용하기 위한 것이다.옵션인 안전 매개변수는 인용되지 않아야 하는 추가 문자를 지정하며, 기본값은 '/'이다.

그것은 통과를 의미한다.''안전하게 첫 번째 문제를 해결하십시오.

>>> urllib.quote('/test')
'/test'
>>> urllib.quote('/test', safe='')
'%2Ftest'

두 번째 이슈에 대해, 그것에 대한 버그 리포트가 있다.분명히 그것은 파이톤 3에서 고쳐졌다.다음과 같이 UTF-8로 인코딩하여 해결할 수 있다.

>>> query = urllib.quote(u"Müller".encode('utf8'))
>>> print urllib.unquote(query).decode('utf8')
Müller

그런데, URLencode를 한 번 보십시오.

파이톤 3

Python 3에서는 함수가 다음으로 이동되었다.urllib.parse:

>>> import urllib.parse
>>> print(urllib.parse.quote("Müller".encode('utf8')))
M%C3%BCller
>>> print(urllib.parse.unquote("M%C3%BCller"))
Müller

Python 3에서는 로 이동되었으며 기본적으로 유니코드를 처리한다.

>>> from urllib.parse import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'
>>> quote('/El Niño/')
'/El%20Ni%C3%B1o/'

내 생각에 모듈requests훨씬 낫다.에 기반을 두고 있다.urllib3.

다음을 시도해 보십시오.

>>> from requests.utils import quote
>>> quote('/test')
'/test'
>>> quote('/test', safe='')
'%2Ftest'

내 대답은 파올로의 대답과 비슷하다.

장고를 사용하는 경우 urlquote를 사용할 수 있다.

>>> from django.utils.http import urlquote
>>> urlquote(u"Müller")
u'M%C3%BCller'

Python을 변경하면 이제 기존 포장지가 된다는 것을 의미한다는 점에 유의하십시오.django.utils에 대한 django 2.1 소스 코드에서.http:

A legacy compatibility wrapper to Python's urllib.parse.quote() function.
(was used for unicode handling on Python 2)

사용하는 것이 좋다.urlencode여기서. 단일 파라미터에 대해서는 큰 차이가 없지만 IMHO에서는 코드를 더 선명하게 만든다.(기능을 보면 헷갈려 보인다.quote_plus! - 특히 다른 언어에서 온 사람들 말이다.)

In [21]: query='lskdfj/sdfkjdf/ksdfj skfj'

In [22]: val=34

In [23]: from urllib.parse import urlencode

In [24]: encoded = urlencode(dict(p=query,val=val))

In [25]: print(f"http://example.com?{encoded}")
http://example.com?p=lskdfj%2Fsdfkjdf%2Fksdfj+skfj&val=34

문서화

참조URL: https://stackoverflow.com/questions/1695183/how-can-i-percent-encode-url-parameters-in-python

반응형