Форум сайта python.su
def get(host, path):
header = "GET " + path + " HTTP/1.1\r\n"
header += "Host: " + host + "\r\n"
header += "Connection: Close\r\n\r\n"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 80))
s.send(header)
return s.recv(1024)
Офлайн
dezzЕсли сервер не устанавливает заголовок “Content-Length” - никак.
С помощью s.recv получаю 1024 байт ответа. Вопрос: как узнать полный размер ответа, для его полного получения?
Офлайн
dezzдля получения всех данных не обязательно знать объем, можно в цикле вызывать recv пока не получим все данные.
С помощью s.recv получаю 1024 байт ответа. Вопрос: как узнать полный размер ответа, для его полного получения?
Офлайн
Спасибо за ответы :)
Собственно оба варианта подходят, но лучше циклом пройтись.
Офлайн
Всё оказалось не так просто.
Как оказалось сервер отправляет ответ чанками и в ответе нет заголовка “Content-Length”.
Если вызывать recv циклом, то программа подвисает, как мне сказали, наверно из-за того, что сервер не подчинается заголовку “Connection: Close”
Какие ещё есть идеи?
urllib не предлогать :)
Офлайн
dezzиспользуйте таймаут.
Всё оказалось не так просто.
Как оказалось сервер отправляет ответ чанками и в ответе нет заголовка “Content-Length”.
Если вызывать recv циклом, то программа подвисает, как мне сказали, наверно из-за того, что сервер не подчинается заголовку “Connection: Close”
Офлайн
Если серв не посылает Content-Length, то определить, передался ли полностью файл, невозможно. Алсо какой смысл не разрывать соединение? Keep-alive? Если послать следующий запрос, как отделить первый файл от второго?
Офлайн