python - 尝试使用 python 套接字库向服务器发送请求,出现类型错误
问题描述
当我向服务器“www.python.org”发出请求时,我似乎遇到了类型错误。我刚刚开始学习网络,我正在复习基础知识。我理解为什么会出现类型错误,因为不需要字符串,但是根据我正在阅读的 PDF 教程,这是向服务器发出请求的格式,我输入错误了吗?如何避免类型错误?谢谢。下面的代码:
from socket import *
s = socket(AF_INET,SOCK_STREAM)
s.connect(("www.python.org",80)) # connect
s.send("GET /index.html HTTP/1.0\n\n") # send request
data = s.recv(10000) # get response
s.close()
解决方案
看起来您正在使用 Python 3。在 Python 3 中,字符串文字是 unicode 对象。Unicode 对象不能通过网络套接字发送,只能发送字节。
您正在阅读的教程可能是为 Python 2 编写的,其中字符串文字是字节而不是 unicode。
在 Python 2 中:
this_is_bytes = "my string"
this_is_unicode = u"my string"
在 Python 3 中,默认情况下切换到具有 unicode 字符串:
this_is_bytes = b"my string"
this_is_unicode = "my string"
您要么需要将 unicode 字符串编码为字节:
s.send("GET /index.html HTTP/1.0\n\n".encode('ascii')) # send request
或使用字节文字:
s.send(b"GET /index.html HTTP/1.0\n\n") # send request
推荐阅读
- c# - 如何加入同步和异步?
- android - 记录 Android 导航
- python - Python中的类矩阵
- python - 如何从 Flask 的文本字段中获取 jQuery tagsInput 值
- kubernetes - 我无法通过 Kubernetes 连接到 MQTT(RPI 集群上的 K3s)
- python - add_command discord.py 不工作“传递的命令必须是命令的子类”
- reactjs - 如何使用反应js在esri arcgis地图中绘制标记点
- angular - 如何设置动态创建的复选框角度?
- matlab - 写在边上,树形图 MATLAB
- python - 添加功能以直接从 python 子包中导入某些功能