requests меняет значение параметра

У меня возникла следующая проблема: в ключе, который я передаю в качестве параметра метода get, содержится знак "%". Поискав в интернете, я выяснил, что некоторые символы передаются в формате "% + ASCII код". Таким образом, знак "%" кодируется как "%25" и это ломает мне ключ! Например https://...&authkey=Ib%2f0L... - рабочая ссылка, https://...&authkey=Ib%252f0Lp... - ссылка, приводящая к ошибке ключа. Как это можно исправить? Заранее спасибо.

url =  'https://hk4e-api-os.hoyoverse.com/event/gacha_info/api/getGachaLog'

params = {
        'authkey_ver': 1,
        'sign_type': 2,
        'auth_appid': 'webview_gacha',
        'init_type': 301,
        'lang': 'ru',
        'authkey': "TRdSqWRIb%2f0Lpdo4u8aHJNdAsIzSOy%2fr",
        'gatcha_type': 301,
        'page': 1,
        'size': 6,
        'end_id': 0
    }
res = r.get(url, params = params)

print(res.url)

Если вставить ключ в ссылку вручную, то все работает как надо, если передать ключ в качестве параметра, то он видоизменяется и запрос возвращает ошибку ключа:

{
    "data": null,
    "message": "authkey error",
    "retcode": -100
}

Пример верного ключа:

TRdSqWRIb%2f0Lpdo4u8aHJNdAsIzSOy%2fr

Ключ после передачи в качестве параметра:

TRdSqWRIb%252f0Lpdo4u8aHJNdAsIzSOy%252fr


Ответы (1 шт):

Автор решения: Pavel Mayorov

Вы пытаетесь передать ключ в URL-кодированном виде, из-за чего и возникает проблема с двойным URL-кодированием. Передайте ключ в исходном виде, и проблема решится.

В вашем случае, вам надо заменить в том, что вы считаете ключом, последовательности %2f на символ /

PS если в вопросе вы привели ваш настоящий ключ - немедленно смените его!

→ Ссылка