我尝试通过python requests向某个API发送授权请求。
代码看起来像

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")时,一切正常。

但是,当我尝试通过python -m scriptname "abcde" "abcde"从终端(Pycharm或Ubuntu终端)运行脚本时,收到以下消息作为响应:{"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),并且从终端运行时只是删除了这部分。为什么以及如何避免这种情况?

最佳答案

好。我找到了答案。

我使用了双配额(“)来传递参数,并且以$abc开头的部分密码参数被(我想)env变量abc的空值代替。所以部分密码刚刚消失了,我无法不要使用错误的密码登录。

解。我用单配额(')代替了双配额(“),现在一切正常。

10-01 14:26