Обновлять:
Я переключил это обратно с ответа, когда попробовал решение, представленное в убедительном ответе Ника, и переключился на urfetch Google:
logging.debug("starting urlfetch for http://%s%s" % (self.host, self.url))
result = urlfetch.fetch("http://%s%s" % (self.host, self.url), payload=self.body, method="POST", headers=self.headers, allow_truncated=True, deadline=5)
logging.debug("finished urlfetch")
но, к сожалению, finished urlfetch
никогда не печатается - я вижу, что тайм-аут произошел в журналах (он возвращает 200 через 5 секунд), но выполнение, похоже, не возвращается.
Всем привет-
Я пытаюсь поиграть с API Streaming (aka firehose) Twitter с Google App Engine (я знаю, что это, вероятно, не лучшая долгосрочная игра, поскольку вы не можете постоянно поддерживать соединение с GAE), но до сих пор мне не удавалось заставить мою программу фактически анализировать результаты. вернулся из Твиттера.
Некоторый код:
logging.debug("firing up urllib2")
req = urllib2.Request(url="http://%s%s" % (self.host, self.url), data=self.body, headers=self.headers)
logging.debug("called urlopen for %s %s, about to call urlopen" % (self.host, self.url))
fobj = urllib2.urlopen(req)
logging.debug("called urlopen")
К сожалению, когда это выполняется, мой вывод отладки никогда не показывает напечатанную строку called urlopen
. Я подозреваю, что происходит то, что Twitter держит соединение открытым, а urllib2 не возвращается, потому что сервер не разрывает соединение.
Wireshark показывает, что запрос был отправлен правильно, а ответ возвращен с результатами.
Я попытался добавить Connection: close
в заголовок моего запроса, но это не дало успешного результата.
Любые идеи о том, как заставить это работать?