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