更新:
当我尝试在有说服力的尼克的回答中提出的解决方案并切换到谷歌的 urlfetch 时,我将其从已回答切换回来:
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
的是,它从未被打印出来——我在日志中看到了超时(它在 5 秒后返回 200),但执行似乎没有返回。
大家好-
我正在尝试使用 Google App Engine 使用 Twitter 的Streaming(又名 firehose)API(我知道这可能不是一个很好的长期游戏,因为您无法使用 GAE 永久打开连接),但是所以到目前为止,我还没有让我的程序真正解析 Twitter 返回的结果。
一些代码:
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
到我的请求标头,但这并没有产生成功的结果。
关于如何让它发挥作用的任何想法?