python request post请求的请求参数怎么能不带“

有一个登录接口,请求参数是通过des加密过的,我使用python的request库发送了请求,但是服务端提示解密失败,我通过postman请求接口(使用的是一样的加密后的请求内容)是可以成功返回的.服务端查了原因是我python发送的payload值被双”给引起来了所以服务端解析失败,请问大家python怎么才能发送不带双引号的值;
服务器收到的payload:
python发送:
"260f848e3b00cca5670cda92e2c4dcfb566877b29c88422e6efea445fea1dbdf1b6319b4848ce291107992170ea08b17343ec09a6260d7b83b9ebc33ebd5be27b0bbbce2d5e8ead92dbadb86a0433300db1773ed0d040172842b45417e6fcaa21b4237e85a3b0d0b5cd33f083ed31c760a204647bfa9c1d39904d8722fddf64608cfa0981f14e10c"
postman发送(无引号):
260f848e3b00cca5670cda92e2c4dcfb566877b29c88422e6efea445fea1dbdf1b6319b4848ce291107992170ea08b17343ec09a6260d7b83b9ebc33ebd5be27b0bbbce2d5e8ead92dbadb86a0433300db1773ed0d040172842b45417e6fcaa21b4237e85a3b0d0b5cd33f083ed31c760a204647bfa9c1d39904d8722fddf64608cfa0981f14e10c


def des_encrypt(value, secret_key, iv_key):
    #加密
    cipher = init_cipher(secret_key, iv_key)
    buffer = value.encode(encoding="utf-8")
    buffer = cipher.encrypt(buffer)
    print("...................")
    print(type(buffer.hex())) #---》str
    print("...................")
    return buffer.hex()  # 使用hex格式输出

payload={"username":"aaa","password":"123456"}
#写成payload='加密后内容'也不行
res=requests.post(url=url,json=des_encrypt(json.dumps(payload))) #----》服务器解析不了payload

postman是正常的

img

应该不是你说的引号的问题,在程序中,字符串就是引号包起来的,请检查下是不是其它问题,比如请求参数不全,没有设置header,user-agent等等。requests.post(url, json=payload, headers=headers,verify=False)

找到问题的原因了,是因为des_encrypt返回的格式不对,des-ecb加密后能返回hex和base64两种格式,我返回base64(return base64.b64encode(buffer).decode())就好了。网上很多东西都是错误的,以下是我从网上找到的2个des加密方法,试试过了可以用,分享给大家。
方法1:

from pyDes import des, PAD_PKCS5, CBC, ECB
import hashlib,base64
BLOCK_SIZE = 8

def init_cipher(secret_key, iv_key):
    secret_bytes = secret_key.encode(encoding="utf-8")
    key_bytes = []
    if len(secret_bytes) >= BLOCK_SIZE:
        key_bytes = secret_bytes[:BLOCK_SIZE]
    else:
        key_bytes.extend(secret_bytes)
        key_bytes.extend([0 for x in range(0, BLOCK_SIZE - len(secret_bytes))])

    if iv_key is None or len(iv_key) == 0:
        cipher = des(key_bytes, ECB, None, padmode=PAD_PKCS5)
        return cipher
    else:
        iv_bytes = iv_key.encode(encoding="utf-8")
        iv_key_bytes = []
        if len(iv_bytes) >= BLOCK_SIZE:
            iv_key_bytes = iv_bytes[:BLOCK_SIZE]
        else:
            iv_key_bytes.extend(iv_bytes)
            iv_key_bytes.extend([0 for x in range(0, BLOCK_SIZE - len(iv_bytes))])

        cipher = des(key_bytes, CBC, iv_key_bytes, padmode=PAD_PKCS5)
        return cipher

def des_encrypt(value, secret_key, iv_key):
    cipher = init_cipher(secret_key, iv_key)
    buffer = value.encode(encoding="utf-8")
    buffer = cipher.encrypt(buffer)
    print(type(buffer.hex()))
    # return buffer.hex()  # 返回hex格式
    return base64.b64encode(buffer).decode() #返回base64格式

def des_decrypt(value, secret_key, iv_key):
    cipher = init_cipher(secret_key, iv_key)
    # buffer = bytes.fromhex(value)  # 读取hex格式数据,若加密后返回hex则用此方法
    buffer = base64.b64decode(value) #读取base64格式,若加密后返回base64则用此方法
    buffer = cipher.decrypt(buffer)
    return buffer.decode("utf-8")

iv = "abcdefg"
data = '{"grantType":"password","username":"zhangsan","password":"123456","clientId":"webApp","clientSecret":"webApp","scope":"server"}'  
# 密钥
key = 'aee25f18365140f0af6a60dcaa77122f'

encryptText1 = des_encrypt(data, key, iv)
print("经过【DES-CBC】加密后:", encryptText1)

decryptText1 = des_decrypt(encryptText1, key, iv)
print("经过【DES-CBC】解密后:", decryptText1)

encryptText1111 = des_encrypt(data, key, None)
print("经过【DES-ECB】加密后:", encryptText1111)

decryptText2 = des_decrypt(encryptText1111, key, None)
print("经过【DES-ECB】解密后:", decryptText2)

方法2

from pyDes import des, PAD_PKCS5, ECB

class dc_des:
    def __init__(self):
        DES_KEY = "test_key"  # 默认8位密钥,假key,des默认要求key长度为8,否则报错,所以给个假的
        self.des_obj = des(DES_KEY, ECB, DES_KEY, padmode=PAD_PKCS5)  # 初始化一个des对象,参数是秘钥,加密方式,偏移, 填充方式
        self.des_obj.setKey('aee25f18365140f0af6a60dcaa77122f')  # 改变为真实的密钥key

    def encrypt(self, obj):
        des_obj = self.des_obj
        secret_bytes = des_obj.encrypt(obj)  # 用对象的encrypt方法加密
        # return base64.b64encode(secret_bytes).decode() #返回base64的格式
        return secret_bytes.hex() #返回hex格式

    def decrypt(self, secret_bytes):
        des_obj = self.des_obj
        # secret_bytes = base64.b64decode(secret_bytes) # 若加密后的内容为base64格式则用此方法
        secret_bytes = bytes.fromhex(secret_bytes) # 若加密后的内容为hex格式则用此方法
        obj = des_obj.decrypt(secret_bytes)  # 用对象的decrypt方法解密
        return obj.decode()

if __name__ == '__main__':
    data = '{"grantType":"password","username":"zhangsan","password":"123456","clientId":"webApp","clientSecret":"webApp","scope":"server"}'  
    dc=dc_des()
    res=dc.encrypt(data)
    print("加密后")
    print(res)
    print("解密后")
    print(dc.decrypt(res))