Постоянные HTTPS-соединения в Python
Я хочу сделать HTTPS-запрос к потоку в реальном времени и оставить соединение открытым, чтобы я мог продолжать читать содержимое и обрабатывать его.
Я хочу написать скрипт на python. Я не уверен, как сохранить соединение открытым в моем сценарии. Я проверил конечную точку с помощью curl, которая успешно поддерживает соединение. Но как мне это сделать в Python. В настоящее время у меня есть следующий код:
c = httplib.HTTPSConnection('userstream.twitter.com')
c.request("GET", "/2/user.json?" + req.to_postdata())
response = c.getresponse()
Куда мне идти отсюда?
Спасибо!
3 ответа
Похоже, ваш поток в реальном времени доставляется как один бесконечный HTTP-ответ GET, да? Если это так, вы можете просто использовать встроенный в python urllib2.urlopen (). Он возвращает файл-подобный объект, из которого вы можете читать столько, сколько хотите, пока сервер не зависнет от вас.
f=urllib2.urlopen('https://encrypted.google.com/')
while True:
data = f.read(100)
print(data)
Имейте в виду, что хотя urllib2 говорит по протоколу https, он не проверяет сертификаты сервера, поэтому вы можете попробовать добавить дополнительный пакет, например pycurl или urlgrabber, для большей безопасности. (Я не уверен, поддерживает ли urlgrabber https.)
Функции поддержания соединения недоступны ни в одной из стандартных библиотек python для https. Вероятно, самый зрелый вариант urllib3
httplib2 поддерживает это. (Я бы подумал, что это самый зрелый вариант, еще не знал urllib3, поэтому TokenMacGuy все еще может быть прав)
РЕДАКТИРОВАТЬ: хотя httplib2 поддерживает постоянные соединения, я не думаю, что вы действительно можете использовать потоки с ним (т.е. один длинный ответ против нескольких запросов по одному и тому же соединению), что я теперь понимаю, что вам может понадобиться.