WebProxy (python) получает массаж ConnectionResetError: [WinError 10054] Существующее соединение было принудительно закрыто удаленным хостом - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь использовать WebProxy для подключения к www.google.com, но получаю ошибку и не знаю, как ее исправить.

Вот вывод: Необработанное исключение в потоке, запущенном Traceback (самое последнее последний вызов): файл "C: / Users / dangt / Desktop / test / test3.py", строка 134, в proxy_thread data = s.recv (MAX_DATA_RECV) ConnectionResetError: [WinError 10054] Существующее соединение было принудительно закрыто удаленный хост

Это код

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)

if 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 (message):
        if s:
            s.close()
        if conn:
            conn.close()
        printout("Peer Reset",first_line,client_addr)
        sys.exit(1)
else:
    conn.close()

вывод показывает, что у меня ошибка при получении данных с сервера .

...