我通过使用套接字库制作了一个使用python 3.5
打开网页的程序。首先,我提示用户输入 URL,然后 split()
该 URL 为 connect()
方法提取主机名。但我收到以下错误,该错误指向我的 get 请求命令:
cmd ='GET ' + user_url + ' HTTP/1.0\n\n'.encode() TypeError: Can't convert 'bytes' object to str implicitly
以下是我的代码:
import socket
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\n\n'.encode()
mysock.send(cmd)
while True:
data = mysock.recv(512)
if (len(data) < 1):
break
print (data.decode(),end='')
mysock.close()
最佳答案
cmd ='GET ' + user_url + ' HTTP/1.0\n\n'.encode()
^ ^ ^
str str bytes
该行仅对最后一部分进行编码,并且不可能将字符串类型与字节类型混合,这解释了错误。
您想要对整个字符串进行编码,例如如下所示:
cmd = ('GET ' + user_url + ' HTTP/1.0\n\n').encode()
更好的是,使用 format
以避免混淆和字符串添加:
cmd ='GET {} HTTP/1.0\n\n'.format(user_url).encode()
关于python - 无法将 'bytes' 对象隐式转换为 str python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51406294/