can only concatenate str (not "bytes") to str
Solution 1
A str
is an abstract sequence of Unicode code points; a bytes
is a sequence of 8-bit numbers. Python 3 made the distinction between the two very clear and does not allow you to combine them implicitly. A str
may have several valid encodings, and a bytes
object may or may not be the encoding of a valid Unicode string. (Or, the bytes
could be the encoding of multiple different str
objects depending on the encoding used to create it.)
'GET '
and user_url
are str
objects, while ' HTTP/1.0\r\n\r\n'.encode()
is a bytes
object. You want to encode the entire concatenated string instead.
cmd = 'GET {} HTTP/1.0\r\n\r\n'.format(user_url).encode()
Or perhaps written to show the steps more clearly,
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
Solution 2
The problem is that you're encoding before concatenating:
'GET ' + user_url + ' HTTP/1.0\r\n\r\n'.encode()
You have to concatenate first, and then encode the entire thing:
('GET ' + user_url + ' HTTP/1.0\r\n\r\n').encode()
Related videos on Youtube
Pharah181
Updated on July 09, 2022Comments
-
Pharah181 almost 2 years
import socket import os user_url = input("Enter url: ") host_name = user_url.split("/")[2] mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) mysock.connect((host_name, 80)) cmd = 'GET ' + user_url + ' HTTP/1.0\r\n\r\n'.encode() mysock.send(cmd) while True: data = mysock.recv(512) if len(data) < 1: break print(data.decode(),end='\n') mysock.close()
For some reason im gettin this error
Enter url: http://data.pr4e.org/romeo.txt
7 mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 8 mysock.connect((host_name, 80)) 9 cmd = 'GET ' + user_url + ' HTTP/1.0\r\n\r\n'.encode() TypeError: can only concatenate str (not "bytes") to str
Any ideas what im doing wrong with it?Encoding and decoding seems right to me, and i've trasnfered it using \n before .encode(). This is for a class
-
JorgeMadson almost 3 yearsI got the same issue in the same problem! Thank you for the question freecodecamp.org/learn/scientific-computing-with-python/…
-
-
Aynos almost 4 yearsHm that doesn't work.... before: Error:
TypeError: can only concatenate str (not "bytes") to str
with this code:cmd.send(output + output_error)
and with @chepner 's solution I have this Code:cmd.send(output.encode() + output_error.encode())
. But then I get this error:AttributeError: 'bytes' object has no attribute 'encode'
.