Индекс списка вне диапазона, предотвращающего ошибку 404? - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь завершить эту лабораторную работу, но не могу заставить ее работать правильно.Когда я пытаюсь получить файл, отсутствующий на сервере, мне дают

Эта страница не работает 127.0.0.1 отправил неверный ответ.ERR_INVALID_HTTP_RESPONSE

Ответ, который я хотел бы получить, выглядит следующим образом:

404 Файл не найден

Когда я пытаюсь загрузитьфайл отсутствует, компилятор сообщает для строки 16:

filename = message.split () [1] IndexError: список индексов выходит за пределы

Код компилируетсяи я могу открыть файл Hello World, но я просто не могу получить эту ошибку 404.Мне дали код скелета, поэтому есть некоторые вещи, которые я не могу изменить, не отклоняясь от материала курса.

from socket import *

serverSocket = socket(AF_INET, SOCK_STREAM)
#Prepare a server socket
serverPort = 7000
serverSocket.bind(('127.0.0.1', serverPort))
serverSocket.listen(5)

while True:
    print('Ready to serve...')
    connectionSocket, addr = serverSocket.accept()
    #Fill in start #Fill in end
    try:
        message = connectionSocket.recv(1024)
        print (message)
        filename = message.split()[1]
        f = open(filename[1:])
        outputdata = f.read()
        #Send one HTTP header line into socket
        #Fill in start
        connectionSocket.send('\nHTTP/1.x 200 OK\n'.encode())

        #Fill in end
        #Send the content of the requested file to the client
        for i in range(0, len(outputdata)):
            connectionSocket.send(outputdata[i].encode())
        connectionSocket.send("\r\n".encode())
        connectionSocket.close()
        print ('File Recieved')

    except IOError:
        connectionSocket.send('\n404 File Not Found\n'.encode())
        connectionSocket.close()
        #Close client socket

serverSocket.close()
sys.exit()

Код скелета выглядит как Python 2, и я использую Python 3. I 'Мы внесли некоторые незначительные изменения в синтаксис.

Удаление print (message) приводит к появлению «File Recceive» в компиляторе, но в браузере по-прежнему отсутствует ошибка 404.Я в растерянности через 8 часов.

1 Ответ

0 голосов
/ 09 октября 2018

Один из способов обработки IndexError в message.split()[1] - обработка и IndexError в message.split()[1];)

try:
    filename = message.split()[1]
except IndexError:
    send_404_response()
    continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...