Постоянные соединения HTTPS в Python

Я хочу сделать HTTPS-запрос к потоку в реальном времени и оставить соединение открытым, чтобы я мог продолжать читать содержимое и обрабатывать его.

Я хочу написать скрипт на питоне. Я не уверен, как сохранить соединение открытым в моем сценарии. Я протестировал конечную точку с помощью curl, которая успешно поддерживает соединение. Но как мне это сделать в Python. В настоящее время у меня есть следующий код:

c = httplib.HTTPSConnection('userstream.twitter.com')
c.request("GET", "/2/user.json?" + req.to_postdata())
response = c.getresponse()

Куда мне идти отсюда?

Спасибо!


person deruse    schedule 25.08.2011    source источник


Ответы (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.)

person ʇsәɹoɈ    schedule 26.08.2011

Функции поддержания соединения недоступны ни в одной из стандартных библиотек Python для https. Вероятно, наиболее зрелым вариантом является urllib3.

person SingleNegationElimination    schedule 26.08.2011
comment
это неверно. urllib2 из stdlib не поддерживает постоянные соединения, но http://stackoverflow.com/a/9781027/4279. Хотя urllib3 или запросы (построенные поверх urllib3) неплохи варианты, если вы можете использовать сторонние библиотеки. - person jfs; 26.08.2012

http://code.google.com/p/httplib2/ поддерживает это. (Я бы подумал, что это самый зрелый вариант, еще не знал urllib3, поэтому TokenMacGuy все еще может быть прав)

РЕДАКТИРОВАТЬ: хотя httplib2 поддерживает постоянные соединения, я не думаю, что вы действительно можете использовать потоки с ним (т.е. один длинный ответ против нескольких запросов по одному и тому же соединению), которые, как я теперь понимаю, вам могут понадобиться.

person Steven    schedule 26.08.2011