A str
- абстрактная последовательность кодовых точек Unicode; bytes
- это последовательность 8-битных чисел. Python 3 очень четко разграничил эти два элемента и не позволяет вам объединять их неявно. str
может иметь несколько допустимых кодировок, а объект bytes
может или не может быть кодировкой действительной строки Unicode. (Или bytes
может быть кодировкой нескольких различных str
объектов в зависимости от кодировки, использованной для его создания.)
'GET '
и user_url
являются str
объектами, в то время как ' HTTP/1.0\r\n\r\n'.encode()
является bytes
объектами. Вместо этого вы хотите закодировать всю сцепленную строку.
cmd = 'GET {} HTTP/1.0\r\n\r\n'.format(user_url).encode()
Или, возможно, написано, чтобы показать шаги более четко,
cmd = 'GET {} HTTP/1.0\r\n\r\n'.format(user_url) # still a str
mysock.send(cmd.encode()) # send the encoding of the str