파이썬에서 쿼리 문자열을 urlencode하는 방법은 무엇입니까?
제출하기 전에이 문자열을 urlencode하려고합니다.
queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"];
다음 urlencode()
과 같이 매개 변수를 맵핑 (dict) 또는 2 개의 튜플 시퀀스 로 전달해야합니다 .
>>> import urllib
>>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'}
>>> urllib.urlencode(f)
'eventName=myEvent&eventDescription=cool+event'
파이썬 3 이상
사용하다:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
이것은 일반적으로 사용되는 의미에서 URL 인코딩을 수행 하지 않습니다 (출력 참조). 이를 위해 urllib.parse.quote_plus
.
파이썬 2
당신이 찾고있는 것은 urllib.quote_plus
:
>>> urllib.quote_plus('string_of_characters_like_these:$#@=?%^Q^$')
'string_of_characters_like_these%3A%24%23%40%3D%3F%25%5EQ%5E%24'
파이썬 3
Python 3에서는 urllib
패키지가 더 작은 구성 요소로 분리되었습니다. 사용합니다 urllib.parse.quote_plus
( parse
자식 모듈에 유의하십시오 )
import urllib.parse
urllib.parse.quote_plus(...)
urllib 대신 요청 을 시도 하면 urlencode를 신경 쓸 필요가 없습니다!
import requests
requests.get('http://youraddress.com', params=evt.fields)
편집하다:
당신이 필요로하는 경우 명령 이름 - 값 쌍 다음 세트 PARAMS이 너무 좋아 이름 또는 여러 값을 :
params=[('name1','value11'), ('name1','value12'), ('name2','value21'), ...]
사전을 사용하는 대신.
문맥
- 파이썬 (버전 2.7.2)
문제
- urlencoded 쿼리 문자열을 생성하려고합니다.
- 이름-값 쌍을 포함하는 사전 또는 객체가 있습니다.
- 이름-값 쌍의 출력 순서를 제어 할 수 있기를 원합니다.
해결책
- urllib.urlencode
- urllib.quote_plus
함정
- 이름-값 쌍의 사전 출력 임의 순서
- (또한 파이썬이 왜 내 사전을 그렇게 주문합니까? )
- (또한 참조 : 사전의 순서가 임의적 인 이유는 무엇입니까? )
- 이름-값 쌍의 순서를 신경 쓰지 않는 경우 처리 사례
- 이 때의 경우를 처리 DO 이름 - 값 쌍의 순서에 대해주의를
- 모든 이름-값 쌍 세트에서 단일 이름을 두 번 이상 표시해야하는 경우 처리
예
다음은 몇 가지 함정을 처리하는 방법을 포함하여 완벽한 솔루션입니다.
### ********************
## init python (version 2.7.2 )
import urllib
### ********************
## first setup a dictionary of name-value pairs
dict_name_value_pairs = {
"bravo" : "True != False",
"alpha" : "http://www.example.com",
"charlie" : "hello world",
"delta" : "1234567 !@#$%^&*",
"echo" : "user@example.com",
}
### ********************
## setup an exact ordering for the name-value pairs
ary_ordered_names = []
ary_ordered_names.append('alpha')
ary_ordered_names.append('bravo')
ary_ordered_names.append('charlie')
ary_ordered_names.append('delta')
ary_ordered_names.append('echo')
### ********************
## show the output results
if('NO we DO NOT care about the ordering of name-value pairs'):
queryString = urllib.urlencode(dict_name_value_pairs)
print queryString
"""
echo=user%40example.com&bravo=True+%21%3D+False&delta=1234567+%21%40%23%24%25%5E%26%2A&charlie=hello+world&alpha=http%3A%2F%2Fwww.example.com
"""
if('YES we DO care about the ordering of name-value pairs'):
queryString = "&".join( [ item+'='+urllib.quote_plus(dict_name_value_pairs[item]) for item in ary_ordered_names ] )
print queryString
"""
alpha=http%3A%2F%2Fwww.example.com&bravo=True+%21%3D+False&charlie=hello+world&delta=1234567+%21%40%23%24%25%5E%26%2A&echo=user%40example.com
"""
파이썬 3 :
urllib.parse.quote_plus (문자열, 안전 = '', 인코딩 = 없음, 오류 = 없음)
urllib.urlencode가 항상 트릭을 수행하지는 않습니다. 문제는 일부 서비스가 사전을 작성할 때 손실되는 인수의 순서를 관리한다는 것입니다. 이러한 경우 Ricky가 제안한 것처럼 urllib.quote_plus가 더 좋습니다.
이 시도:
urllib.pathname2url(stringToURLEncode)
urlencode
사전에서만 작동하기 때문에 작동하지 않습니다. quote_plus
올바른 출력을 생성하지 못했습니다.
파이썬 3에서 이것은 나와 함께 일했습니다.
import urllib
urllib.parse.quote(query)
향후 참조를 위해 (예 : python3의 경우)
>>> import urllib.request as req
>>> query = 'eventName=theEvent&eventDescription=testDesc'
>>> req.pathname2url(query)
>>> 'eventName%3DtheEvent%26eventDescription%3DtestDesc'
파이썬 2와 3을 모두 지원해야하는 스크립트 / 프로그램에서 사용하기 위해 6 개의 모듈은 따옴표 및 urlencode 함수를 제공합니다.
>>> from six.moves.urllib.parse import urlencode, quote
>>> data = {'some': 'query', 'for': 'encoding'}
>>> urlencode(data)
'some=query&for=encoding'
>>> url = '/some/url/with spaces and %;!<>&'
>>> quote(url)
'/some/url/with%20spaces%20and%20%25%3B%21%3C%3E%26'
urllib.parse.urlencode ()에서 오류가 발생하면 urllib3 모듈을 사용해보십시오.
구문은 다음과 같습니다 :
import urllib3
urllib3.request.urlencode({"user" : "john" })
이미 언급되지 않은 또 다른 것은 해당 매개 변수가없는 대신 urllib.urlencode()
사전의 빈 값을 문자열로 인코딩 한다는 것 None
입니다. 이것이 일반적으로 원하는지 아닌지 모르겠지만 사용 사례에 맞지 않으므로 사용해야 quote_plus
합니다.
참고 URL : https://stackoverflow.com/questions/5607551/how-to-urlencode-a-querystring-in-python
'development' 카테고리의 다른 글
문자 집합간에 텍스트 파일을 변환하는 가장 좋은 방법은 무엇입니까? (0) | 2020.02.12 |
---|---|
파이썬에서 상대적 가져 오기를 수행하는 방법? (0) | 2020.02.12 |
부트 스트랩에서 col-lg- *, col-md- * 및 col-sm- *의 차이점은 무엇입니까? (0) | 2020.02.11 |
JavaScript eval 함수를 사용하는 것이 좋지 않은 이유는 무엇입니까? (0) | 2020.02.11 |
파이썬 try-else (0) | 2020.02.11 |