Я пытаюсь загрузить веб-страницу или файлы с URL-адреса, используя сокет, но он работает очень медленно в EOF

        result = s.recv(8192)
        num_bytes_recv += len(result)
        index = result.find('\r\n\r\n')
        result_wo_header = result[index+4:]
        data = ""
        with open(file_name, 'wb') as f:
            data+=result_wo_header
            while True:
                print "number of byte recieve : ",num_bytes_recv
                result = s.recv(8192)
                print result
                if not result: 
                    break
                num_bytes_recv+=len(result)
                data+=result
            f.write(data)   
        print "download complete"
        s.close()

Я пытаюсь загрузить любые типы файлов с заданного URL-адреса, код работает отлично, пока не достигнет конца или последнего фрагмента данных, он застрял там до 10 секунд. Я делаю что-то не так здесь? до 5~10 секунд от последнего "количества полученных байтов:" до "загрузки завершена" помогите!!


person Madwolf    schedule 11.10.2016    source источник
comment
Используйте заголовок ответа Content-Length, чтобы узнать, сколько данных вам нужно прочитать из сокета. См. stackoverflow.com/a/15995101/2644759.   -  person Philip Tzou    schedule 11.10.2016
comment
Вы используете протокол HTTP/1.0 или HTTP/1.1? 1.1 по умолчанию сохраняет соединение открытым, чтобы его можно было повторно использовать для нескольких запросов, 1.0 по умолчанию закрывает соединение после завершения загрузки. Если вы используете 1.1, вы должны отправить Connection: close, чтобы закрыть соединение в конце.   -  person Barmar    schedule 11.10.2016
comment
Привет, Бармар, большое спасибо, отлично решил мою проблему.   -  person Madwolf    schedule 12.10.2016