在尝试从HttpURLConnection打开InputStream时,我们从某些服务器中随机获得了一些意外结果。看起来这些服务器会接受连接并使用“保持活动”标头进行回复,这会使Socket保持打开状态,但不允许将数据发送回流。
这种情况使得多线程爬虫尝试有点“复杂”,因为如果某个连接被卡住,运行它的线程将永远不会返回...否认它的池的完成,它来自控制器,认为一些线程仍在工作。
有没有办法读取连接响应头来识别“保持活着”的答案并避免尝试打开流?
答案 0 :(得分:1)
除了“连接超时”之外,您是否尝试设置“读取超时”?
请参阅http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLConnection.html#setReadTimeout%28int%29
答案 1 :(得分:1)
我不确定我在这里缺少什么,但在我看来,你只需要getHeaderField()?