индекс списка вне диапазона (веб-прокси-сервер) - PullRequest
0 голосов
/ 18 марта 2020

У меня есть проект о WebProxyServer. Когда я запускаю код, у него появляется ошибка «индекс списка вне диапазона». Я не могу найти, где ошибка.

def proxy_thread (conn, client_addr):

# get the request from browser
request = conn.recv(MAX_DATA_RECV)
#print(" Test " + request)
request = request.decode()
#print(" Test " + request)

# parse the first line 
first_line = request.split('\n')[0]
print("Test first_line " + first_line)
#first_line = request.split('\n')
#first_line = first_line[0]

# get url
url = first_line.split(' ')[1]
print(" Test url " + url)

for i in range(0,len(BLOCKED)):
    if BLOCKED[i] in url:
        printout("Blacklisted",first_line,client_addr)
        conn.close()
        sys.exit(1)


#printout("Request",first_line,client_addr)
# print "URL:",url
# print

# find the webserver and port
http_pos = url.find("://")          # find pos of ://
if (http_pos==-1):
    temp = url
else:
    temp = url[(http_pos+3):]       # get the rest of url

port_pos = temp.find(":")           # find the port pos (if any)

# find end of web server
webserver_pos = temp.find("/")
if webserver_pos == -1:
    webserver_pos = len(temp)

webserver = ""
port = -1
if (port_pos==-1 or webserver_pos < port_pos):      # default port
    port = 80
    webserver = temp[:webserver_pos]
else:       # specific port
    port = int((temp[(port_pos+1):])[:webserver_pos-port_pos-1])
    webserver = temp[:port_pos]

try:
    # create a socket to connect to the web server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    s.connect((webserver, port))
    s.sendto(request.encode(),(webserver,port))
    #s.send(request)         # send request to webserver

    while 1:
        # receive data from web server
        data = s.recv(MAX_DATA_RECV)

        if (len(data) > 0):
            # send to browser
            conn.send(data)
        else:
            break
    s.close()
    #conn.close()
except socket.error (value, message):
    if s:
        s.close()
    if conn:
        conn.close()
    printout("Peer Reset",first_line,client_addr)
    sys.exit(1)

Я пытаюсь подключиться к www.google.com, и вот вывод:

Порт не указан, используя: 8080 (http-alt) Прокси-сервер, работающий на: 8080 Test first_line CONNECT www.google.com: 443 HTTP / 1.1

Test url www.google.com: 443 Test first_line

Необработанное исключение в потоке, запущенном Traceback (последний вызов был последним): Файл "C: \ Users \ dangt \ Desktop \ test \ test1.py", строка 85, в proxy_thread url = first_line.split ('') [1] IndexError: список индексов из диапазон

1 Ответ

0 голосов
/ 18 марта 2020

Я нашел ответ. Я должен обработать на мгновение first_line = 0

, если first_line = 0, conn.close ()

...