我已经尝试了encode()
但它没有用。我一直收到TypeError: must be str, not bytes
,因为通常我会TypeError: a bytes-like object is required, not 'str'
。
ip = socket.gethostbyname("google.com")
port = 80
robot = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
payload = "Hello world"
try:
robot.connect((ip, port)))
robot.send('GET '+payload.encode()+' HTTP/1.1\n\n')
except socket.error:
print("connection lost")
robot.close()
我不明白我做错了什么?
答案 0 :(得分:3)
如果查看socket.send
的文档,可以看到第一个参数是bytes
,而不是字符串。您encode
一个具有特定编码的字符串将其转换为字节,并使用特定编码的decode
字节将它们转换为字符串:
robot.send(b'GET ' + payload.encode() + b' HTTP/1.1\n\n')
str.encode
和str.decode
默认为utf-8
。