Python: Jak zapobiegać użyciu znaku procenta w url przez requests?
Jeśli potrzebujesz url z parametem podobnym do poniższego (z +
i :
)
key=site:dummy+type:example+group:wheel
i użyjesz standardowej metody przekazywania parametrów w requests
payload = {
'key': 'site:dummy+type:example+group:wheel'
}
r = requests.get(url, params=payload)
to zostanie on przekonwetowany do postaci "bezpiecznej" dla przesyłu parametrów
key=site%3Adummy%2Btype%3Aexample%2Bgroup%3Awheel"
Aby zachować +
i :
bez zamianay na wartość ze znakiem procentu możes użyć bezpośrednio napisu w params
:
r = requests.get(url, params='key=site:dummy+type:example+group:wheel')
Możesz także zautoatyzować konwersję słownika payload
do napisu:
payload = {
'format': 'json',
'key': 'site:dummy+type:example+group:wheel'
}
payload_str = "&".join("%s=%s" % (k,v) for k,v in payload.items())
# 'format=json&key=site:dummy+type:example+group:wheel'
url = 'https://httpbin.org/get'
r = requests.get(url, params=payload_str)
print(r.text)
Możesz także wykorzystać do tego urllib.parse.urlencode(...)
z parametrem safe=
aby poinformować jakie znaki mają nie być konwertowane.
W tym przykładzie tp będzie safe=':+'
import requests
import urllib.parse
payload = {
'format': 'json',
'key': 'site:dummy+type:example+group:wheel'
}
payload_str = urllib.parse.urlencode(payload, safe=':+')
# 'format=json&key=site:dummy+type:example+group:wheel'
url = 'https://httpbin.org/get'
r = requests.get(url, params=payload_str)
print(r.text)
If you like it
Buy a Coffee
