py2->py3 怎么转呀

2020-04-09 10:58:35 +08:00
 jeblur
import socket
  
target_host = "cn.bing.com"
target_port = 80

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client.connect((target_host,target_port))

client.send("GET / HTTP/1.1\r\nHost:cn.bing.com\r\n\r\n")

response = client.recv(4096)

print(response)

TypeError: a bytes-like object is required, not 'str'

python 初学者,错误提示是需要把 str encode 到字节流:

但是还是不知道怎么做才好。。

烦请 v 友指点下,谢谢!

2985 次点击
所在节点    Python
8 条回复
maltoze
2020-04-09 11:04:51 +08:00
client.send(b"GET / HTTP/1.1\r\nHost:cn.bing.com\r\n\r\n")
Mithrandir
2020-04-09 11:07:36 +08:00
man 2to3
mnsw
2020-04-09 11:08:40 +08:00
"GET / HTTP/1.1\r\nHost:cn.bing.com\r\n\r\n"
改成
b"GET / HTTP/1.1\r\nHost:cn.bing.com\r\n\r\n"
gimp
2020-04-09 11:09:45 +08:00
str_data = "GET / HTTP/1.1\r\nHost:cn.bing.com\r\n\r\n"
b_str_data = str_data.encode()
jeblur
2020-04-09 11:27:40 +08:00
@gimp 感谢,所以这个是上面方法的完整做法?
gimp
2020-04-09 11:36:07 +08:00
如果需要动态拼接内容,就用 encode() 编码后发送,固定值可以用 b"" 来标注内容类型。
leavic
2020-04-09 13:00:45 +08:00
我不知道我理解对不对
1 、用引号圈起来的默认是 string
2 、跟机器交互一般都用过 bytes 数据,不是 string
3 、string encode 成 bytes 给机器用,bytes decode 成 string 给人读。
linvaux
2020-04-09 17:56:47 +08:00
貌似有个工具 2to3 可以转

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/660708

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX