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

标签 python string sockets byte

我通过使用套接字库制作了一个使用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/

相关文章:

python - 为什么 where 参数默认值为 false?

python - 将图表叠加在视频上

python - 在 Pyramid 中使用 App Engine 任务队列

python - 在 PDF 文件中查找文本位置

java - Perl Pipe 不重定向 Java 进程输出

java - 在 AS3 中的本地主机上无法接收来自套接字服务器的响应

python - 如果目标文件夹中已存在文件,如何替换文件?

android - 如何通过 Activity 将多个值保存到单个变量。

java - 数据何时真正通过socket发送?

mysql - 为什么这个字符串比较mysql查询没有返回任何内容?