无法将'bytes'对象转换为隐式的python

时间:2018-07-18 15:53:07

标签: python string sockets byte

我制作了一个程序,可以使用套接字库使用python 3.5打开网页。首先,我提示用户输入URL,然后我split()使用该URL提取connect()方法的主机名。但是我遇到以下错误,它指向我的get request命令:

  

cmd ='GET'+ user_url +'HTTP / 1.0 \ n \ n'.encode()TypeError:无法   将'bytes'对象转换为隐式str

以下是我的代码:

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()

1 个答案:

答案 0 :(得分:2)

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()