Я пытаюсь отправить авторизационный запрос к некоторому API через python requests
.Код выглядит так:
import requests
import argparse
import json
URL = "some url"
parser = argparse.ArgumentParser()
parser.add_argument("username", help="Username")
parser.add_argument("password", help="Password")
args = parser.parse_args()
def get_token(username, password):
url = URL + "/auth"
headers = {'Content-type': 'application/json'}
params = {
"username": username,
"password": password
}
r = requests.post(url, json=params, headers=headers)
return json.loads(r.content.decode('utf-8'))['data']['token']
token = get_token(args.username, args.password)
print(token)
Пароль содержит различные символы, включая. $)?и т.д.
Когда я передаю аргументы через Pycharm Run / Debug Configurations Параметры с кавычками (например, "abcde" "abcde"
) все в порядке.
Но когда я пытаюсь запустить скрипт из терминала (Pycharm или Ubuntu) через python -m scriptname "abcde" "abcde"
, я получаю следующее сообщение в ответ: {"message":"invalid login data","statusCode":400,"status":"BAD_REQUEST"}
Я предполагаю, что есть какая-то проблема со строкойкодировка, но не может ее найти.
Кодировка файла (показана в правом нижнем углу окна в Pycharm) - UTF-8.Кодировка строки в терминале echo $LANG
- это en_US.UTF-8.python -c "import sys; print(sys.stdout.encoding)"
также возвращает UTF-8.
ОБНОВЛЕНИЕ
Я только что заметил, что некоторая часть пароля исчезает, когда я передаю его какпараметр в терминале.У меня есть пароль с текстом $qTyqf
внутри (например, abcde$qTyqf§abcde
), и эта часть просто удаляется при запуске из терминала.Почему и как этого избежать?