J'essaie d'établir une connexion HTTPS dans Python3 et lorsque j'essaie de coder mon nom d'utilisateur et mon mot de passe, la méthode base64
encodebytes
renvoie la valeur codée avec un nouveau caractère de ligne à la fin "\ n". C'est pourquoi je reçois un erreur lorsque j'essaie de me connecter.
Existe-t-il un moyen de dire à la bibliothèque base64
de ne pas ajouter de nouveau caractère de ligne lors du codage ou quel est le meilleur moyen de supprimer ce nouveau caractère de ligne? J'ai essayé d'utiliser la méthode replace
mais j'obtiens l'erreur suivante:
Traceback (most recent call last):
File "data_consumer.py", line 33, in <module>
auth_base64 = auth_base64.replace('\n', '')
TypeError: expected bytes, bytearray or buffer compatible object
Mon code:
auth = b'[email protected]:passWORD'
auth_base64 = base64.encodebytes(auth)
auth_base64 = auth_base64.replace('\n', '')
Des idées? Merci
Au lieu de encodestring
, envisagez d'utiliser b64encode
. Ultérieurement, n’ajoute pas de caractères \n
. par exemple.
In [11]: auth = b'[email protected]:passWORD'
In [12]: base64.encodestring(auth)
Out[12]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA==\n'
In [13]: base64.b64encode(auth)
Out[13]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA=='
Il produit une chaîne encodée identique sauf le \n
Le code suivant fonctionnerait
auth_base64 = auth_base64.decode('utf-8').replace('\n', '')
Je suis d'accord avec l'observation de Mandar que base64.xxxx_encode()
produirait une sortie sans retour à la ligne \n
.
Pour ceux qui veulent une compréhension plus confiante qu’une simple observation, c’est la promesse officielle (en quelque sorte) que je peux trouver sur ce sujet. La documentation Python 3 mentionne base64.encode(...)
ajouterait des nouvelles lignes tous les 76 octets de sortie. Comparées à cela, toutes les autres fonctions *_encode(...)
ne mentionnent pas du tout leur comportement de retour à la ligne, ce qui peut sans conteste être considéré comme "sans comportement de retour à la ligne". Pour ce que ça vaut, la documentation Python 2 ne mentionne rien du retour à la ligne.
pour l'utilisation de python3: -
binascii.b2a_base64 (cipher_text, newline = False )
pour utiliser python2:
binascii.b2a_base64 (cipher_text) [: -1]