Python의 내장라이브러리인 urllib.urlencode()를 사용하면 Dictionary형태의 문자열을 URL인코딩할 수 있습니다.
하지만 URL인코딩 시 반환 값의 순서 즉, 각 Dictionary요소의 순서는 길이에 따라 불규칙합니다.
이를 해결하기 위해 "Dictionary의 KEY List" 를 활용한 약간의 Trick이 필요합니다.
아래는 이에 대한 소스코드 예제입니다.
### ********************
## 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
"""
'Python > Basic' 카테고리의 다른 글
[Python-Basic] 윈도우 환경 파이썬 설치 (0) | 2014.10.31 |
---|---|
[Python-Basic] 조건문(if) (0) | 2014.09.16 |
[Python-Basic] 예외 처리(Except) (0) | 2014.09.16 |
[Python-Basic] Network Socket (0) | 2014.09.16 |
[Python-basic] 주요 딕셔너리 메소드 (0) | 2014.09.16 |