Search on blog:

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