I\'m trying to make a HTTPS connection in Python3 and when I try to encode my username and password the base64
encodebytes
method returns the encoded v
Instead of encodestring
consider using b64encode
. Later does not add \n
characters. e.g.
In [11]: auth = b'username@domain.com:passWORD'
In [12]: base64.encodestring(auth)
Out[12]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA==\n'
In [13]: base64.b64encode(auth)
Out[13]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA=='
It produces identical encoded string except the \n
Following code would work
auth_base64 = auth_base64.decode('utf-8').replace('\n', '')
for python3 use:-
binascii.b2a_base64(cipher_text, newline=False)
for python2 use:
binascii.b2a_base64(cipher_text)[:-1]
I concur with Mandar's observation that base64.xxxx_encode()
would produce output without line wrap \n
.
For those who want a more confident understanding than merely an observation, these are the official promise (sort of), that I can find on this topic. The Python 3 documentation does mention base64.encode(...)
would add newlines after every 76 bytes of output. Comparing to that, all other *_encode(...)
functions do not mention their linewrap behavior at all, which can argurably be considered as "no line wrap behavior". For what it's worth, the Python 2 documentation does not mention anything about line wrap at all.