In Python 3.5, using sockets, I have:
message = 'HTTP/1.1 200 OK\nContent-Type: text/html\n\n'
s.send(message.encode())
How can I do that in one line? I ask because I had:
s.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n')
but in Python 3.5 bytes are required, not a string, so this gives the error:
builtins.TypeError: a bytes-like object is required, not 'str'
Should I not be using send?
str
, the type of text, is not the same as bytes
, the type of sequences of eight-bit words. To concisely convert from one to the other, you could inline the call to encode
(just as you could with any function call)...
s.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n'.encode())
.. bearing in mind that it's often a good idea to specify the encoding you want to use...
s.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n'.encode('ascii'))
... but it's simpler to use a bytes literal. Prefix your string with a b
:
s.send(b'HTTP/1.1 200 OK\nContent-Type: text/html\n\n')
But you know what's even simpler? Letting someone else do HTTP for you. Have you thought about using a server such as Flask, or even the standard library, to build your app?
Use this:
s.send(b'your text')
Adding b
in front of a string will convert it to bytes
.
Putting a b
or B
before an opening quote will change a str
literal to a bytes
literal:
s.send(b'HTTP/1.1 200 OK\nContent-Type: text/html\n\n')