diccionario de Python y json.dumps () Análisis del hoyo encontrado

Los proyectos más recientes tienen que hacer tubo de atraque Yi Yun erp, vio su documentación de la interfaz, código de ejemplo, php, por lo que en parodias pitón.

En donde los datos de parámetros pasados ​​en los primeros datos JSON son fijos, y, finalmente, que tenga que añadir una firma que es, después de la cadena de datos anterior de json, el extremo de cadena de empalme screct final, hacer tratamiento md5 (mayúsculas 32) parámetro JSON pasó en el pasado como un puesto de antes, y después se añade a la firma.

Cuando el problema radica en la cadena de montaje de JSON y firma, porque pitón diccionario incorporado es desordenada, me llevó a los datos JSON montado se pasa a la función que he escrito la firma como un argumento, a la orden del diccionario interno está cambiando, por lo que la firma valores de MD5 antes y después no son los mismos, lo que lleva a un error frecuente que en un principio no se preocupan por la secuencia de datos que hacer, porque éste no está firmado, la transferencia de datos es simple acoplamiento Kingdee ERP, lo que resulta en la dirección equivocada se produce cuando la solución de problemas. Entonces pensar en el cuidado comenzado a abordar esta cuestión.

La solución es utilizar colecciones OrderedDict biblioteca (diccionario ordenada) del módulo, los datos reunidos no está fuera de orden, la firma MD5 también es consistente

Sin embargo, cuando los datos para json.dumps uso JSON () método, una cadena de datos estará en un espacio después de la coma, resultando en un valor de error md5

principio:

archivo

La solución es

json.dumps (datos, separadores = ( ' '':'))

Por último, escriben sus propias funciones dejan de ser un ejemplo

def getShops (): datos = OrderedDict () de datos [ "appkey"] = datos appkey [ "SessionKey"] = datos SessionKey [ "método"] = datos de los métodos [ "page_no"] = "1" datos [ "PAGE_SIZE"] = "10" de datos [ "signo"] = signo (datos, secreto) = respuesta requests.post (url = URL, los datos = json.dumps (datos)) impresión (response.text)

signo def (datos, secretos): str = json.dumps (datos, separadores = ( ' '':')) fullStr = secreto + str + secreto SignCode = hashlib.md5 (fullStr.encode ( "UTF-8" )). hexdigest (). () #print superior (SignCode) SignCode retorno

Publicado 38 artículos originales · ganado elogios 1 · vistas 2191

Supongo que te gusta

Origin blog.csdn.net/wulishinian/article/details/104836443
Recomendado
Clasificación