Найти - Пользователи
Полная версия: socket.recv(bufsize)
Начало » Network » socket.recv(bufsize)
1
dezz
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)
С помощью s.recv получаю 1024 байт ответа. Вопрос: как узнать полный размер ответа, для его полного получения?
regall
dezz
С помощью s.recv получаю 1024 байт ответа. Вопрос: как узнать полный размер ответа, для его полного получения?
Если сервер не устанавливает заголовок “Content-Length” - никак.
o7412369815963
dezz
С помощью s.recv получаю 1024 байт ответа. Вопрос: как узнать полный размер ответа, для его полного получения?
для получения всех данных не обязательно знать объем, можно в цикле вызывать recv пока не получим все данные.
dezz
Спасибо за ответы :)
Собственно оба варианта подходят, но лучше циклом пройтись.
dezz
Всё оказалось не так просто.
Как оказалось сервер отправляет ответ чанками и в ответе нет заголовка “Content-Length”.
Если вызывать recv циклом, то программа подвисает, как мне сказали, наверно из-за того, что сервер не подчинается заголовку “Connection: Close”

Какие ещё есть идеи?
urllib не предлогать :)
o7412369815963
dezz
Всё оказалось не так просто.
Как оказалось сервер отправляет ответ чанками и в ответе нет заголовка “Content-Length”.
Если вызывать recv циклом, то программа подвисает, как мне сказали, наверно из-за того, что сервер не подчинается заголовку “Connection: Close”
используйте таймаут.
asilyator
Если серв не посылает Content-Length, то определить, передался ли полностью файл, невозможно. Алсо какой смысл не разрывать соединение? Keep-alive? Если послать следующий запрос, как отделить первый файл от второго?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB