我在一个http服务器上工作,它给予了一个错误,即索引不在数组中
伙计们,帮帮忙!
下面是代码:
import socket
#Make a socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("0.0.0.0", 8080))
sock.listen(1)
#Handling requests
while True:
#listening for client
client, address = sock.accept()
try:
#reads file from response and makes a response
client.send(str(f"HTTP/1.1 200 OK \n\n{open(f'.{client.recv(1024).decode().splitlines()[0].split()[1]}', 'rb').read()}").encode('utf-8'))
#HTTP Response 404
except FileNotFoundError:
client.send("HTTP/1.1 404 Not Found".encode("utf-8"))
下面是错误:
Traceback (most recent call last):
File "/data/data/com.termux/files/home/SimpleHTTP/Generic/main.py", line 12, in <module>
client.send(str(f"HTTP/1.1 200 OK \n\n{open(f'.{client.recv(1024).decode().splitlines()[0].split()[1]}', 'rb').read()}").encode('utf-8'))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
1条答案
按热度按时间91zkwejq1#
错误消息指示列表索引超出范围,这意味着您正在尝试访问不存在的列表的元素。当您尝试拆分从客户端接收的消息时,会发生这种情况:
客户端可能没有发送有效的HTTP请求,因此消息没有被正确拆分。您可以添加一些错误处理,以便在尝试访问拆分列表中的第二个元素之前检查消息是否被正确拆分。
例如,您可以尝试这样的操作:
这段代码首先检查接收到的消息是否不为空。然后它将消息拆分成行并检查列表是否不为空。然后它将第一行拆分成部分并检查列表是否至少有两个元素。最后,它尝试打开请求的文件并将其作为响应发送回客户端。如果没有找到该文件它会发送一个404错误。请注意,这段代码还使用with语句来确保文件在阅读后正确关闭。