首页 > 解决方案 > 尝试使用 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()

标签: pythonsocketsnetworking

解决方案


看起来您正在使用 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


推荐阅读